@@ -156,7 +156,9 @@ if (__DEV__) {
156
156
// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.
157
157
// Only used when enableSuspenseLayoutEffectSemantics is enabled.
158
158
let offscreenSubtreeIsHidden : boolean = false ;
159
+ const offscreenSubtreeIsHiddenStack : Array < boolean > = [];
159
160
let offscreenSubtreeWasHidden: boolean = false;
161
+ const offscreenSubtreeWasHiddenStack: Array< boolean > = [];
160
162
161
163
const PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;
162
164
@@ -2303,35 +2305,11 @@ function commitLayoutEffects_begin(
2303
2305
const wasHidden = current !== null && current . memoizedState !== null ;
2304
2306
const isHidden = fiber . memoizedState !== null ;
2305
2307
2306
- const newOffscreenSubtreeIsHidden =
2307
- isHidden || offscreenSubtreeIsHidden ;
2308
- const newOffscreenSubtreeWasHidden =
2309
- wasHidden || offscreenSubtreeWasHidden ;
2308
+ offscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden ;
2309
+ offscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden ;
2310
2310
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 ) ;
2335
2313
}
2336
2314
}
2337
2315
@@ -2372,6 +2350,23 @@ function commitLayoutMountEffects_complete(
2372
2350
while ( nextEffect !== null ) {
2373
2351
const fiber = nextEffect ;
2374
2352
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
+
2375
2370
if (
2376
2371
enableSuspenseLayoutEffectSemantics &&
2377
2372
isModernRoot &&
0 commit comments