Skip to content

Commit e90c76a

Browse files
author
Brian Vaughn
authored
Revert "Offscreen: Use JS stack to track hidden/unhidden subtree state" (#21194)
This reverts commit 1f8583d.
1 parent 1f8583d commit e90c76a

File tree

2 files changed

+46
-56
lines changed

2 files changed

+46
-56
lines changed

packages/react-reconciler/src/ReactFiberCommitWork.new.js

+23-28
Original file line numberDiff line numberDiff line change
@@ -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.
158158
let offscreenSubtreeIsHidden: boolean = false;
159+
const offscreenSubtreeIsHiddenStack: Array<boolean> = [];
159160
let offscreenSubtreeWasHidden: boolean = false;
161+
const offscreenSubtreeWasHiddenStack: Array<boolean> = [];
160162

161163
const 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 &&

packages/react-reconciler/src/ReactFiberCommitWork.old.js

+23-28
Original file line numberDiff line numberDiff line change
@@ -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.
158158
let offscreenSubtreeIsHidden: boolean = false;
159+
const offscreenSubtreeIsHiddenStack: Array<boolean> = [];
159160
let offscreenSubtreeWasHidden: boolean = false;
161+
const offscreenSubtreeWasHiddenStack: Array<boolean> = [];
160162

161163
const 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

Comments
 (0)