فهرست منبع

fix lazynode diff bug adding children

Evan Almloff 3 سال پیش
والد
کامیت
aec5cd9dfa
2فایلهای تغییر یافته به همراه26 افزوده شده و 0 حذف شده
  1. 1 0
      packages/core/src/diff.rs
  2. 25 0
      tests/diffing.rs

+ 1 - 0
packages/core/src/diff.rs

@@ -424,6 +424,7 @@ impl<'b> DiffState<'b> {
             (0, 0) => {}
             (0, _) => {
                 let created = self.create_children(new.children);
+                self.mutations.push_root(root);
                 self.mutations.append_children(created as u32);
             }
             (_, _) => self.diff_children(old.children, new.children),

+ 25 - 0
tests/diffing.rs

@@ -730,3 +730,28 @@ fn remove_list_nokeyed() {
         ]
     );
 }
+
+#[test]
+fn add_nested_elements() {
+    let vdom = new_dom();
+
+    let (_create, change) = vdom.diff_lazynodes(
+        rsx! {
+            div{}
+        },
+        rsx! {
+            div{
+                div{}
+            }
+        },
+    );
+
+    assert_eq!(
+        change.edits,
+        [
+            CreateElement { root: 2, tag: "div" },
+            PushRoot { root: 1 },
+            AppendChildren { many: 1 },
+        ]
+    );
+}