mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-09-22 15:21:58 +00:00
fix: keyed diffing accidentally pushing every node
This commit is contained in:
parent
6b17522507
commit
92573d67a1
2 changed files with 7 additions and 18 deletions
|
@ -853,7 +853,7 @@ impl<'b> DiffState<'b> {
|
|||
nodes_created += self.create_node(new_node);
|
||||
} else {
|
||||
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);
|
||||
} else {
|
||||
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);
|
||||
} else {
|
||||
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
|
||||
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 {
|
||||
VNode::Text(_) | VNode::Placeholder(_) => {
|
||||
VNode::Text(_) | VNode::Placeholder(_) | VNode::Element(_) => {
|
||||
self.mutations.push_root(node.mounted_id());
|
||||
1
|
||||
}
|
||||
|
@ -1110,7 +1110,7 @@ impl<'b> DiffState<'b> {
|
|||
VNode::Fragment(frag) => {
|
||||
let mut added = 0;
|
||||
for child in frag.children {
|
||||
added += self.push_all_nodes(child);
|
||||
added += self.push_all_real_nodes(child);
|
||||
}
|
||||
added
|
||||
}
|
||||
|
@ -1118,16 +1118,7 @@ impl<'b> DiffState<'b> {
|
|||
VNode::Component(c) => {
|
||||
let scope_id = c.scope.get().unwrap();
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,14 +53,12 @@ export class Interpreter {
|
|||
}
|
||||
}
|
||||
CreateTextNode(text, root) {
|
||||
// todo: make it so the types are okay
|
||||
const node = document.createTextNode(text);
|
||||
this.nodes[root] = node;
|
||||
this.stack.push(node);
|
||||
}
|
||||
CreateElement(tag, root) {
|
||||
const el = document.createElement(tag);
|
||||
// el.setAttribute("data-dioxus-id", `${root}`);
|
||||
this.nodes[root] = el;
|
||||
this.stack.push(el);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue