@@ -156,7 +156,9 @@ if (__DEV__) {
156156// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.
157157// Only used when enableSuspenseLayoutEffectSemantics is enabled.
158158let offscreenSubtreeIsHidden : boolean = false ;
159+ const offscreenSubtreeIsHiddenStack : Array < boolean > = [];
159160let offscreenSubtreeWasHidden: boolean = false;
161+ const offscreenSubtreeWasHiddenStack: Array< boolean > = [];
160162
161163const PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;
162164
@@ -2303,35 +2305,11 @@ function commitLayoutEffects_begin(
23032305 const wasHidden = current !== null && current . memoizedState !== null ;
23042306 const isHidden = fiber . memoizedState !== null ;
23052307
2306- const newOffscreenSubtreeIsHidden =
2307- isHidden || offscreenSubtreeIsHidden ;
2308- const newOffscreenSubtreeWasHidden =
2309- wasHidden || offscreenSubtreeWasHidden ;
2308+ offscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden ;
2309+ offscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden ;
23102310
2311- if (
2312- newOffscreenSubtreeIsHidden !== offscreenSubtreeIsHidden ||
2313- newOffscreenSubtreeWasHidden !== offscreenSubtreeWasHidden
2314- ) {
2315- const prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden ;
2316- const prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden ;
2317-
2318- nextEffect = fiber ;
2319- offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden ;
2320- offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden ;
2321-
2322- // Traverse the Offscreen subtree with the current Offscreen as the root.
2323- commitLayoutEffects_begin (
2324- fiber , // New root; bubble back up to here and stop.
2325- root ,
2326- committedLanes ,
2327- ) ;
2328-
2329- nextEffect = fiber . sibling ;
2330- offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden ;
2331- offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden ;
2332-
2333- continue ;
2334- }
2311+ offscreenSubtreeWasHiddenStack . push ( wasHidden ) ;
2312+ offscreenSubtreeIsHiddenStack . push ( isHidden ) ;
23352313 }
23362314 }
23372315
@@ -2372,6 +2350,23 @@ function commitLayoutMountEffects_complete(
23722350 while ( nextEffect !== null ) {
23732351 const fiber = nextEffect ;
23742352
2353+ if ( enableSuspenseLayoutEffectSemantics && isModernRoot ) {
2354+ if ( fiber . tag === OffscreenComponent ) {
2355+ offscreenSubtreeWasHiddenStack . pop ( ) ;
2356+ offscreenSubtreeIsHiddenStack . pop ( ) ;
2357+ offscreenSubtreeWasHidden =
2358+ offscreenSubtreeWasHiddenStack . length > 0 &&
2359+ offscreenSubtreeWasHiddenStack [
2360+ offscreenSubtreeWasHiddenStack . length - 1
2361+ ] ;
2362+ offscreenSubtreeIsHidden =
2363+ offscreenSubtreeIsHiddenStack . length > 0 &&
2364+ offscreenSubtreeIsHiddenStack [
2365+ offscreenSubtreeIsHiddenStack . length - 1
2366+ ] ;
2367+ }
2368+ }
2369+
23752370 if (
23762371 enableSuspenseLayoutEffectSemantics &&
23772372 isModernRoot &&
0 commit comments