Skip to content

Commit d445cee

Browse files
authored
Make temporary NoStrictPassiveEffects option work with useModernStrictMode (#27105)
## Summary Since we are enabling `useModernStrictMode` flag internally, to make sure the internal testing of half StrictMode doesn't suddenly break, this PR makes sure it also works with `useModernStrictMode` true. ## Test plan: Manually set `useModernStrictMode` to true. `yarn test ReactOffscreenStrictMode-test -r=www-modern --env=development --variant=true` `yarn test ReactStrictMode-test.internal -r=www-modern --env=development --variant=true`
1 parent 9f4fbec commit d445cee

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

packages/react-reconciler/src/ReactFiberWorkLoop.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ import {
9090
ConcurrentMode,
9191
StrictLegacyMode,
9292
StrictEffectsMode,
93+
NoStrictPassiveEffectsMode,
9394
} from './ReactTypeOfMode';
9495
import {
9596
HostRoot,
@@ -3538,11 +3539,19 @@ function recursivelyTraverseAndDoubleInvokeEffectsInDEV(
35383539
}
35393540

35403541
// Unconditionally disconnects and connects passive and layout effects.
3541-
function doubleInvokeEffectsOnFiber(root: FiberRoot, fiber: Fiber) {
3542+
function doubleInvokeEffectsOnFiber(
3543+
root: FiberRoot,
3544+
fiber: Fiber,
3545+
shouldDoubleInvokePassiveEffects: boolean = true,
3546+
) {
35423547
disappearLayoutEffects(fiber);
3543-
disconnectPassiveEffect(fiber);
3548+
if (shouldDoubleInvokePassiveEffects) {
3549+
disconnectPassiveEffect(fiber);
3550+
}
35443551
reappearLayoutEffects(root, fiber.alternate, fiber, false);
3545-
reconnectPassiveEffects(root, fiber, NoLanes, null, false);
3552+
if (shouldDoubleInvokePassiveEffects) {
3553+
reconnectPassiveEffects(root, fiber, NoLanes, null, false);
3554+
}
35463555
}
35473556

35483557
function doubleInvokeEffectsInDEVIfNecessary(
@@ -3559,7 +3568,11 @@ function doubleInvokeEffectsInDEVIfNecessary(
35593568
if (fiber.flags & PlacementDEV) {
35603569
setCurrentDebugFiberInDEV(fiber);
35613570
if (isInStrictMode) {
3562-
doubleInvokeEffectsOnFiber(root, fiber);
3571+
doubleInvokeEffectsOnFiber(
3572+
root,
3573+
fiber,
3574+
(fiber.mode & NoStrictPassiveEffectsMode) === NoMode,
3575+
);
35633576
}
35643577
resetCurrentDebugFiberInDEV();
35653578
} else {

0 commit comments

Comments
 (0)