diff --git a/packages/core/src/diff.rs b/packages/core/src/diff.rs index 5682772be..a0be7fd3c 100644 --- a/packages/core/src/diff.rs +++ b/packages/core/src/diff.rs @@ -423,6 +423,7 @@ impl<'b> DiffState<'b> { match (old.children.len(), new.children.len()) { (0, 0) => {} (0, _) => { + self.mutations.push_root(root); let created = self.create_children(new.children); self.mutations.append_children(created as u32); } diff --git a/tests/diffing.rs b/tests/diffing.rs index fbe114949..b8d5b3273 100644 --- a/tests/diffing.rs +++ b/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, + [ + PushRoot { root: 1 }, + CreateElement { root: 2, tag: "div" }, + AppendChildren { many: 1 }, + ] + ); +}