Parcourir la source

Reclaim element id for all removed nodes (#3782)

* reclaim el id for nested dyn nodes

* reclaim root element ids as well
Josh Rose il y a 2 jours
Parent
commit
a0f83f2679
2 fichiers modifiés avec 10 ajouts et 7 suppressions
  1. 4 1
      packages/core/src/diff/node.rs
  2. 6 6
      packages/core/tests/diff_unkeyed_list.rs

+ 4 - 1
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] {

+ 6 - 6
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 },
             ]