diff --git a/packages/react-reconciler/src/ReactFiber.new.js b/packages/react-reconciler/src/ReactFiber.new.js index 2ea25195a7c02..a18514c50c0f2 100644 --- a/packages/react-reconciler/src/ReactFiber.new.js +++ b/packages/react-reconciler/src/ReactFiber.new.js @@ -492,7 +492,11 @@ export function createFiberFromTypeAndProps( break; case REACT_STRICT_MODE_TYPE: fiberTag = Mode; - mode |= StrictLegacyMode | StrictEffectsMode; + mode |= StrictLegacyMode; + if (enableStrictEffects && (mode & ConcurrentMode) !== NoMode) { + // Strict effects should never run on legacy roots + mode |= StrictEffectsMode; + } break; case REACT_PROFILER_TYPE: return createFiberFromProfiler(pendingProps, mode, lanes, key); diff --git a/packages/react-reconciler/src/ReactFiber.old.js b/packages/react-reconciler/src/ReactFiber.old.js index 1e30bb9c7a3a3..4fbbb5a00efca 100644 --- a/packages/react-reconciler/src/ReactFiber.old.js +++ b/packages/react-reconciler/src/ReactFiber.old.js @@ -492,7 +492,11 @@ export function createFiberFromTypeAndProps( break; case REACT_STRICT_MODE_TYPE: fiberTag = Mode; - mode |= StrictLegacyMode | StrictEffectsMode; + mode |= StrictLegacyMode; + if (enableStrictEffects && (mode & ConcurrentMode) !== NoMode) { + // Strict effects should never run on legacy roots + mode |= StrictEffectsMode; + } break; case REACT_PROFILER_TYPE: return createFiberFromProfiler(pendingProps, mode, lanes, key); diff --git a/packages/react-reconciler/src/ReactFiberClassComponent.new.js b/packages/react-reconciler/src/ReactFiberClassComponent.new.js index 44b9db7aacb27..c464b6c3bf411 100644 --- a/packages/react-reconciler/src/ReactFiberClassComponent.new.js +++ b/packages/react-reconciler/src/ReactFiberClassComponent.new.js @@ -923,7 +923,6 @@ function mountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1005,7 +1004,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1060,7 +1058,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1078,7 +1075,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; diff --git a/packages/react-reconciler/src/ReactFiberClassComponent.old.js b/packages/react-reconciler/src/ReactFiberClassComponent.old.js index ab2bb43796781..adb616c6262b9 100644 --- a/packages/react-reconciler/src/ReactFiberClassComponent.old.js +++ b/packages/react-reconciler/src/ReactFiberClassComponent.old.js @@ -923,7 +923,6 @@ function mountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1005,7 +1004,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1060,7 +1058,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags; @@ -1078,7 +1075,6 @@ function resumeMountClassInstance( enableStrictEffects && (workInProgress.mode & StrictEffectsMode) !== NoMode ) { - // Never double-invoke effects for legacy roots. fiberFlags |= MountLayoutDev; } workInProgress.flags |= fiberFlags;