@@ -42,6 +42,7 @@ import {
4242 enableUpdaterTracking ,
4343 enableCache ,
4444 enableTransitionTracing ,
45+ enableFlipOffscreenUnhideOrder ,
4546} from 'shared/ReactFeatureFlags' ;
4647import {
4748 FunctionComponent ,
@@ -2270,28 +2271,56 @@ function commitMutationEffectsOnFiber(
22702271 const isHidden = newState !== null ;
22712272 const offscreenBoundary : Fiber = finishedWork ;
22722273
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+ }
22892286 }
22902287 }
2288+ } else {
2289+ if ( wasHidden ) {
2290+ // TODO: Move re-appear call here for symmetry?
2291+ }
22912292 }
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+ }
22952324 }
22962325 }
22972326 }
0 commit comments