Skip to content

Commit 3aaf6ff

Browse files
committed
fix(): dot not re-render controlled nodes before mounted
1 parent bfb8087 commit 3aaf6ff

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

packages/runtime/src/internal/Renderer.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,12 +592,16 @@ async function legacyRenderBrick(
592592
type: "initial",
593593
runtimeContext,
594594
});
595-
596595
const { onMount, onUnmount } = brickConf.lifeCycle ?? {};
597596

598597
if (tracking) {
599598
let renderId = 0;
600599
const listener = async () => {
600+
// TODO(steve): start listeners when mounting, and handle changes between rendering and mounting.
601+
if (!returnNode.mounted || returnNode.disposed) {
602+
return;
603+
}
604+
601605
const currentRenderId = ++renderId;
602606
const [scopedRuntimeContext, tplStateStoreScope, formStateStoreScope] =
603607
createScopedRuntimeContext(runtimeContext);
@@ -612,7 +616,8 @@ async function legacyRenderBrick(
612616
// Ignore stale renders
613617
if (
614618
renderId === currentRenderId &&
615-
!(returnNode.tag !== RenderTag.ROOT && returnNode.disposed)
619+
returnNode.mounted &&
620+
!returnNode.disposed
616621
) {
617622
if (onUnmount) {
618623
listenerFactory(

packages/runtime/src/internal/interfaces.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export interface RenderAbstract extends BaseRenderNode {
6868
return: RenderReturnNode;
6969
iid?: string;
7070
disposes?: (() => void)[];
71-
disposed?: boolean;
7271
}
7372

7473
export interface BaseRenderNode {
@@ -77,6 +76,8 @@ export interface BaseRenderNode {
7776
sibling?: RenderChildNode;
7877
return?: RenderReturnNode | null;
7978
childElements?: HTMLElement[];
79+
disposed?: boolean;
80+
mounted?: boolean;
8081
}
8182

8283
export type RenderNode = RenderRoot | RenderBrick | RenderAbstract;

packages/runtime/src/internal/mount.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ export function mountTree(
1717
root: RenderRoot,
1818
initializedElement?: RuntimeBrickElement
1919
): void {
20+
root.mounted = true;
2021
window.DISABLE_REACT_FLUSH_SYNC = false;
2122
let current = root.child;
2223
const portalElements: RuntimeBrickElement[] = [];
2324
while (current) {
25+
current.mounted = true;
2426
if (current.tag === RenderTag.BRICK) {
2527
const tagName = current.type;
2628

0 commit comments

Comments
 (0)