From b2860a3d730606f702cbad4913e0f1b8541d50d3 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 9 Jan 2024 11:50:41 -0600 Subject: [PATCH] fix diffing components --- packages/core/src/diff/component.rs | 7 +++++-- packages/core/src/scope_arena.rs | 9 +++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/diff/component.rs b/packages/core/src/diff/component.rs index 95185d128..f5aa707c4 100644 --- a/packages/core/src/diff/component.rs +++ b/packages/core/src/diff/component.rs @@ -122,8 +122,8 @@ impl VNode { pub(super) fn create_component_node( &self, - _mount: MountId, - _idx: usize, + mount: MountId, + idx: usize, component: &VComponent, parent: Option, dom: &mut VirtualDom, @@ -135,6 +135,9 @@ impl VNode { .context() .id; + // Store the scope id for the next render + dom.mounts[mount.0].mounted_dynamic_nodes[idx] = scope.0; + let new = dom.run_scope(scope); dom.create_scope(to, scope, &new, parent) diff --git a/packages/core/src/scope_arena.rs b/packages/core/src/scope_arena.rs index b537060b6..604040696 100644 --- a/packages/core/src/scope_arena.rs +++ b/packages/core/src/scope_arena.rs @@ -34,9 +34,8 @@ impl VirtualDom { pub(crate) fn run_scope(&mut self, scope_id: ScopeId) -> RenderReturn { self.runtime.scope_stack.borrow_mut().push(scope_id); + let scope = &self.scopes[scope_id.0]; let new_nodes = { - let scope = &self.scopes[scope_id.0]; - let context = scope.context(); context.suspended.set(false); context.hook_index.set(0); @@ -44,12 +43,10 @@ impl VirtualDom { // safety: due to how we traverse the tree, we know that the scope is not currently aliased let props: &dyn AnyProps = &*scope.props; - let _span = tracing::trace_span!("render", scope = %scope.context().name); - props.render() + let span = tracing::trace_span!("render", scope = %scope.context().name); + span.in_scope(|| props.render()) }; - let scope = &mut self.scopes[scope_id.0]; - let context = scope.context(); // And move the render generation forward by one