Reclaim element id for all removed nodes (#3782)

* reclaim el id for nested dyn nodes

* reclaim root element ids as well
This commit is contained in:
Josh Rose authored and GitHub committed 2025-07-02 00:34:21 -07:00
1 parent 1db4b2a13d
commit a0f83f2679
2 files changed
+10 -7

No files matched your search

+4 -1
View File
@@ -328,6 +328,9 @@ impl VNode {
to.remove_node(id); to.remove_node(id);
} }
dom.reclaim(id); dom.reclaim(id);
} else {
let id = dom.get_mounted_root_node(mount, idx);
dom.reclaim(id);
} }
} }
} }
@@ -379,8 +382,8 @@ impl VNode {
} else { } else {
to.remove_node(id); to.remove_node(id);
} }
dom.reclaim(id)
} }
dom.reclaim(id)
} }
Fragment(nodes) => { Fragment(nodes) => {
for node in &nodes[..nodes.len() - 1] { for node in &nodes[..nodes.len() - 1] {
+6 -6
View File
@@ -149,13 +149,13 @@ fn removes_one_by_one() {
dom.render_immediate_to_vec().edits, dom.render_immediate_to_vec().edits,
[ [
LoadTemplate { index: 0, id: ElementId(2) }, 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 }, ReplacePlaceholder { path: &[0], m: 1 },
LoadTemplate { index: 0, id: ElementId(8) }, LoadTemplate { index: 0, id: ElementId(5) },
CreateTextNode { value: "1".to_string(), id: ElementId(9) }, CreateTextNode { value: "1".to_string(), id: ElementId(6) },
ReplacePlaceholder { path: &[0], m: 1 }, ReplacePlaceholder { path: &[0], m: 1 },
LoadTemplate { index: 0, id: ElementId(10) }, LoadTemplate { index: 0, id: ElementId(7) },
CreateTextNode { value: "2".to_string(), id: ElementId(11) }, CreateTextNode { value: "2".to_string(), id: ElementId(8) },
ReplacePlaceholder { path: &[0], m: 1 }, ReplacePlaceholder { path: &[0], m: 1 },
ReplaceWith { id: ElementId(4), m: 3 } ReplaceWith { id: ElementId(4), m: 3 }
] ]
@@ -420,7 +420,7 @@ fn remove_many() {
edits.edits, edits.edits,
[ [
LoadTemplate { index: 0, id: ElementId(9,) }, 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 }, ReplacePlaceholder { path: &[0,], m: 1 },
ReplaceWith { id: ElementId(11,), m: 1 }, ReplaceWith { id: ElementId(11,), m: 1 },
] ]