fix: keyed diffing accidentally pushing every node
This commit is contained in:
1 parent
6b17522507
commit
92573d67a1
2 files changed
+7
-18
No files matched your search
@@ -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)
|
self.push_all_real_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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user