diff --git a/packages/core/src/diff.rs b/packages/core/src/diff.rs index 5682772be..768fbe3b9 100644 --- a/packages/core/src/diff.rs +++ b/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), diff --git a/tests/diffing.rs b/tests/diffing.rs index f11f62c42..843d76138 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, + [ + CreateElement { root: 2, tag: "div" }, + PushRoot { root: 1 }, + AppendChildren { many: 1 }, + ] + ); +}