Browse Source

fix: keyed diffing accidentally pushing every node

Jonathan Kelley 3 years ago
parent
commit
92573d67a1
2 changed files with 7 additions and 18 deletions
  1. 7 16
      packages/core/src/diff.rs
  2. 0 2
      packages/interpreter/src/interpreter.js

+ 7 - 16
packages/core/src/diff.rs

@@ -853,7 +853,7 @@ impl<'b> DiffState<'b> {
                     nodes_created += self.create_node(new_node);
                     nodes_created += self.create_node(new_node);
                 } else {
                 } else {
                     self.diff_node(&old[old_index], new_node);
                     self.diff_node(&old[old_index], new_node);
-                    nodes_created += self.push_all_nodes(new_node);
+                    nodes_created += self.push_all_real_nodes(new_node);
                 }
                 }
             }
             }
 
 
@@ -876,7 +876,7 @@ impl<'b> DiffState<'b> {
                         nodes_created += self.create_node(new_node);
                         nodes_created += self.create_node(new_node);
                     } else {
                     } else {
                         self.diff_node(&old[old_index], new_node);
                         self.diff_node(&old[old_index], new_node);
-                        nodes_created += self.push_all_nodes(new_node);
+                        nodes_created += self.push_all_real_nodes(new_node);
                     }
                     }
                 }
                 }
 
 
@@ -899,7 +899,7 @@ impl<'b> DiffState<'b> {
                     nodes_created += self.create_node(new_node);
                     nodes_created += self.create_node(new_node);
                 } else {
                 } else {
                     self.diff_node(&old[old_index], new_node);
                     self.diff_node(&old[old_index], new_node);
-                    nodes_created += self.push_all_nodes(new_node);
+                    nodes_created += self.push_all_real_nodes(new_node);
                 }
                 }
             }
             }
 
 
@@ -1100,9 +1100,9 @@ impl<'b> DiffState<'b> {
     }
     }
 
 
     // recursively push all the nodes of a tree onto the stack and return how many are there
     // recursively push all the nodes of a tree onto the stack and return how many are there
-    fn push_all_nodes(&mut self, node: &'b VNode<'b>) -> usize {
+    fn push_all_real_nodes(&mut self, node: &'b VNode<'b>) -> usize {
         match node {
         match node {
-            VNode::Text(_) | VNode::Placeholder(_) => {
+            VNode::Text(_) | VNode::Placeholder(_) | VNode::Element(_) => {
                 self.mutations.push_root(node.mounted_id());
                 self.mutations.push_root(node.mounted_id());
                 1
                 1
             }
             }
@@ -1110,7 +1110,7 @@ impl<'b> DiffState<'b> {
             VNode::Fragment(frag) => {
             VNode::Fragment(frag) => {
                 let mut added = 0;
                 let mut added = 0;
                 for child in frag.children {
                 for child in frag.children {
-                    added += self.push_all_nodes(child);
+                    added += self.push_all_real_nodes(child);
                 }
                 }
                 added
                 added
             }
             }
@@ -1118,16 +1118,7 @@ impl<'b> DiffState<'b> {
             VNode::Component(c) => {
             VNode::Component(c) => {
                 let scope_id = c.scope.get().unwrap();
                 let scope_id = c.scope.get().unwrap();
                 let root = self.scopes.root_node(scope_id);
                 let root = self.scopes.root_node(scope_id);
-                self.push_all_nodes(root)
-            }
-
-            VNode::Element(el) => {
-                let mut num_on_stack = 0;
-                for child in el.children.iter() {
-                    num_on_stack += self.push_all_nodes(child);
-                }
-                self.mutations.push_root(el.id.get().unwrap());
-                num_on_stack + 1
+                self.push_all_real_nodes(root)
             }
             }
         }
         }
     }
     }

+ 0 - 2
packages/interpreter/src/interpreter.js

@@ -53,14 +53,12 @@ export class Interpreter {
     }
     }
   }
   }
   CreateTextNode(text, root) {
   CreateTextNode(text, root) {
-    // todo: make it so the types are okay
     const node = document.createTextNode(text);
     const node = document.createTextNode(text);
     this.nodes[root] = node;
     this.nodes[root] = node;
     this.stack.push(node);
     this.stack.push(node);
   }
   }
   CreateElement(tag, root) {
   CreateElement(tag, root) {
     const el = document.createElement(tag);
     const el = document.createElement(tag);
-    // el.setAttribute("data-dioxus-id", `${root}`);
     this.nodes[root] = el;
     this.nodes[root] = el;
     this.stack.push(el);
     this.stack.push(el);
   }
   }