diff --git a/src/component/component_node.ts b/src/component/component_node.ts index 656d6727..5f7c3a12 100644 --- a/src/component/component_node.ts +++ b/src/component/component_node.ts @@ -116,10 +116,9 @@ export function component

( } node = new ComponentNode(C, props, ctx.app, ctx); ctx.children[key] = node; + node.initiateRender(new Fiber(node, parentFiber)); } - parentFiber.childrenMap[key] = node; - parentFiber.root!.reachedChildren.add(node); return node; } @@ -327,7 +326,6 @@ export class ComponentNode

implements VNode implements VNode 0; - this.children = this.fiber!.childrenMap; this.bdom!.patch(this!.fiber!.bdom!, hasChildren); + if (hasChildren) { + this.cleanOutdatedChildren(); + } this.fiber!.appliedToDom = true; this.fiber = null; } @@ -359,6 +359,20 @@ export class ComponentNode

implements VNode { await nextTick(); expect(fixture.innerHTML).toBe(""); expect([ - "ChildA:willDestroy", "Parent:willRender", + "ChildA:willDestroy", "ChildA:setup", "ChildA:willStart", "ChildB:setup", @@ -696,8 +696,8 @@ test("rendering component again in next microtick", async () => { "Child:setup", "Child:willStart", "Parent:rendered", - "Child:willDestroy", "Parent:willRender", + "Child:willDestroy", "Child:setup", "Child:willStart", "Parent:rendered", @@ -1725,7 +1725,6 @@ test("concurrent renderings scenario 10", async () => { expect(fixture.innerHTML).toBe("

"); expect([ "ComponentA:willRender", - "ComponentC:willDestroy", "ComponentB:willUpdateProps", "ComponentA:rendered", ]).toBeLogged(); @@ -1736,6 +1735,7 @@ test("concurrent renderings scenario 10", async () => { expect(rendered).toBe(1); expect([ "ComponentB:willRender", + "ComponentC:willDestroy", "ComponentC:setup", "ComponentC:willStart", "ComponentB:rendered", @@ -2275,11 +2275,11 @@ test("concurrent renderings scenario 16", async () => { "D:setup", "D:willStart", "C:rendered", - "D:willDestroy", "B:willRender", "C:willUpdateProps", "B:rendered", "C:willRender", + "D:willDestroy", "D:setup", "D:willStart", "C:rendered", @@ -2990,13 +2990,13 @@ test("t-key on dom node having a component", async () => { expect(fixture.innerHTML).toBe("
3
"); expect([ - "Child (2):willDestroy", "Child (3):setup", "Child (3):willStart", "Child (3):willRender", "Child (3):rendered", "Child (1):willUnmount", "Child (1):willDestroy", + "Child (2):willDestroy", "Child (3):mounted", ]).toBeLogged(); }); @@ -3048,13 +3048,13 @@ test("t-key on dynamic async component (toggler is never patched)", async () => expect(fixture.innerHTML).toBe("
3
"); expect([ - "Child (2):willDestroy", "Child (3):setup", "Child (3):willStart", "Child (3):willRender", "Child (3):rendered", "Child (1):willUnmount", "Child (1):willDestroy", + "Child (2):willDestroy", "Child (3):mounted", ]).toBeLogged(); }); @@ -3107,13 +3107,13 @@ test("t-foreach with dynamic async component", async () => { expect(fixture.innerHTML).toBe("
3
"); expect([ - "Child (2):willDestroy", "Child (3):setup", "Child (3):willStart", "Child (3):willRender", "Child (3):rendered", "Child (1):willUnmount", "Child (1):willDestroy", + "Child (2):willDestroy", "Child (3):mounted", ]).toBeLogged(); });