File tree Expand file tree Collapse file tree 3 files changed +11
-3
lines changed
packages/runtime/src/internal Expand file tree Collapse file tree 3 files changed +11
-3
lines changed Original file line number Diff line number Diff 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 (
Original file line number Diff line number Diff 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
7473export 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
8283export type RenderNode = RenderRoot | RenderBrick | RenderAbstract ;
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments