From a0f83f2679889b91cd0cd54bb24e9325429554ba Mon Sep 17 00:00:00 2001 From: Josh Rose Date: Wed, 2 Jul 2025 03:34:21 -0400 Subject: [PATCH] Reclaim element id for all removed nodes (#3782) * reclaim el id for nested dyn nodes * reclaim root element ids as well --- packages/core/src/diff/node.rs | 5 ++++- packages/core/tests/diff_unkeyed_list.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/core/src/diff/node.rs b/packages/core/src/diff/node.rs index 7225969e4..e239fcb48 100644 --- a/packages/core/src/diff/node.rs +++ b/packages/core/src/diff/node.rs @@ -328,6 +328,9 @@ impl VNode { to.remove_node(id); } dom.reclaim(id); + } else { + let id = dom.get_mounted_root_node(mount, idx); + dom.reclaim(id); } } } @@ -379,8 +382,8 @@ impl VNode { } else { to.remove_node(id); } - dom.reclaim(id) } + dom.reclaim(id) } Fragment(nodes) => { for node in &nodes[..nodes.len() - 1] { diff --git a/packages/core/tests/diff_unkeyed_list.rs b/packages/core/tests/diff_unkeyed_list.rs index 464319c46..9789a6151 100644 --- a/packages/core/tests/diff_unkeyed_list.rs +++ b/packages/core/tests/diff_unkeyed_list.rs @@ -149,13 +149,13 @@ fn removes_one_by_one() { dom.render_immediate_to_vec().edits, [ LoadTemplate { index: 0, id: ElementId(2) }, - CreateTextNode { value: "0".to_string(), id: ElementId(6) }, + CreateTextNode { value: "0".to_string(), id: ElementId(3) }, ReplacePlaceholder { path: &[0], m: 1 }, - LoadTemplate { index: 0, id: ElementId(8) }, - CreateTextNode { value: "1".to_string(), id: ElementId(9) }, + LoadTemplate { index: 0, id: ElementId(5) }, + CreateTextNode { value: "1".to_string(), id: ElementId(6) }, ReplacePlaceholder { path: &[0], m: 1 }, - LoadTemplate { index: 0, id: ElementId(10) }, - CreateTextNode { value: "2".to_string(), id: ElementId(11) }, + LoadTemplate { index: 0, id: ElementId(7) }, + CreateTextNode { value: "2".to_string(), id: ElementId(8) }, ReplacePlaceholder { path: &[0], m: 1 }, ReplaceWith { id: ElementId(4), m: 3 } ] @@ -420,7 +420,7 @@ fn remove_many() { edits.edits, [ LoadTemplate { index: 0, id: ElementId(9,) }, - CreateTextNode { value: "hello 0".to_string(), id: ElementId(7,) }, + CreateTextNode { value: "hello 0".to_string(), id: ElementId(10,) }, ReplacePlaceholder { path: &[0,], m: 1 }, ReplaceWith { id: ElementId(11,), m: 1 }, ]