@@ -42,6 +42,7 @@ import {
42
42
enableUpdaterTracking ,
43
43
enableCache ,
44
44
enableTransitionTracing ,
45
+ enableFlipOffscreenUnhideOrder ,
45
46
} from 'shared/ReactFeatureFlags' ;
46
47
import {
47
48
FunctionComponent ,
@@ -2270,28 +2271,56 @@ function commitMutationEffectsOnFiber(
2270
2271
const isHidden = newState !== null ;
2271
2272
const offscreenBoundary : Fiber = finishedWork ;
2272
2273
2273
- if ( supportsMutation ) {
2274
- // TODO: This needs to run whenever there's an insertion or update
2275
- // inside a hidden Offscreen tree.
2276
- hideOrUnhideAllChildren ( offscreenBoundary , isHidden ) ;
2277
- }
2278
-
2279
- if ( enableSuspenseLayoutEffectSemantics ) {
2280
- if ( isHidden ) {
2281
- if ( ! wasHidden ) {
2282
- if ( ( offscreenBoundary . mode & ConcurrentMode ) !== NoMode ) {
2283
- nextEffect = offscreenBoundary ;
2284
- let offscreenChild = offscreenBoundary . child ;
2285
- while ( offscreenChild !== null ) {
2286
- nextEffect = offscreenChild ;
2287
- disappearLayoutEffects_begin ( offscreenChild ) ;
2288
- offscreenChild = offscreenChild . sibling ;
2274
+ if ( enableFlipOffscreenUnhideOrder ) {
2275
+ if ( enableSuspenseLayoutEffectSemantics ) {
2276
+ if ( isHidden ) {
2277
+ if ( ! wasHidden ) {
2278
+ if ( ( offscreenBoundary . mode & ConcurrentMode ) !== NoMode ) {
2279
+ nextEffect = offscreenBoundary ;
2280
+ let offscreenChild = offscreenBoundary . child ;
2281
+ while ( offscreenChild !== null ) {
2282
+ nextEffect = offscreenChild ;
2283
+ disappearLayoutEffects_begin ( offscreenChild ) ;
2284
+ offscreenChild = offscreenChild . sibling ;
2285
+ }
2289
2286
}
2290
2287
}
2288
+ } else {
2289
+ if ( wasHidden ) {
2290
+ // TODO: Move re-appear call here for symmetry?
2291
+ }
2291
2292
}
2292
- } else {
2293
- if ( wasHidden ) {
2294
- // TODO: Move re-appear call here for symmetry?
2293
+ }
2294
+
2295
+ if ( supportsMutation ) {
2296
+ // TODO: This needs to run whenever there's an insertion or update
2297
+ // inside a hidden Offscreen tree.
2298
+ hideOrUnhideAllChildren ( offscreenBoundary , isHidden ) ;
2299
+ }
2300
+ } else {
2301
+ if ( supportsMutation ) {
2302
+ // TODO: This needs to run whenever there's an insertion or update
2303
+ // inside a hidden Offscreen tree.
2304
+ hideOrUnhideAllChildren ( offscreenBoundary , isHidden ) ;
2305
+ }
2306
+
2307
+ if ( enableSuspenseLayoutEffectSemantics ) {
2308
+ if ( isHidden ) {
2309
+ if ( ! wasHidden ) {
2310
+ if ( ( offscreenBoundary . mode & ConcurrentMode ) !== NoMode ) {
2311
+ nextEffect = offscreenBoundary ;
2312
+ let offscreenChild = offscreenBoundary . child ;
2313
+ while ( offscreenChild !== null ) {
2314
+ nextEffect = offscreenChild ;
2315
+ disappearLayoutEffects_begin ( offscreenChild ) ;
2316
+ offscreenChild = offscreenChild . sibling ;
2317
+ }
2318
+ }
2319
+ }
2320
+ } else {
2321
+ if ( wasHidden ) {
2322
+ // TODO: Move re-appear call here for symmetry?
2323
+ }
2295
2324
}
2296
2325
}
2297
2326
}
0 commit comments