Remove feature flag enableDO_NOT_USE_disableStrictPassiveEffect (#33524)
Jan Kassens committed
Jun 16, 2025 at 12:22 UTC
5d24c64cc9c019fc644c4c6f0da640131b80ba18
14 files changed
+5
-109
packages/react-reconciler/src/ReactFiber.js
-8
@@ -40,7 +40,6 @@ import {
40
enableScopeAPI,
41
enableLegacyHidden,
42
enableTransitionTracing,
43
- enableDO_NOT_USE_disableStrictPassiveEffect,
43
disableLegacyMode,
44
enableObjectFiber,
45
enableViewTransition,
@@ -92,7 +91,6 @@ import {
91
ProfileMode,
92
StrictLegacyMode,
93
StrictEffectsMode,
95
- NoStrictPassiveEffectsMode,
94
SuspenseyImagesMode,
95
} from './ReactTypeOfMode';
96
import {
@@ -599,12 +597,6 @@ export function createFiberFromTypeAndProps(
597
if (disableLegacyMode || (mode & ConcurrentMode) !== NoMode) {
598
// Strict effects should never run on legacy roots
599
mode |= StrictEffectsMode;
602
- if (
603
- enableDO_NOT_USE_disableStrictPassiveEffect &&
604
- pendingProps.DO_NOT_USE_disableStrictPassiveEffect
605
- ) {
606
- mode |= NoStrictPassiveEffectsMode;
607
- }
600
}
601
break;
602
case REACT_PROFILER_TYPE:
packages/react-reconciler/src/ReactFiberHooks.js
+1
-3
@@ -55,7 +55,6 @@ import {
55
ConcurrentMode,
56
StrictEffectsMode,
57
StrictLegacyMode,
58
- NoStrictPassiveEffectsMode,
58
} from './ReactTypeOfMode';
59
import {
60
NoLane,
@@ -2672,8 +2671,7 @@ function mountEffect(
2671
): void {
2672
if (
2673
__DEV__ &&
2675
- (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
2676
- (currentlyRenderingFiber.mode & NoStrictPassiveEffectsMode) === NoMode
2674
+ (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode
2675
) {
2676
mountEffectImpl(
2677
MountPassiveDevEffect | PassiveEffect | PassiveStaticEffect,
packages/react-reconciler/src/ReactFiberWorkLoop.js
+4
-19
@@ -123,7 +123,6 @@ import {
123
ConcurrentMode,
124
StrictLegacyMode,
125
StrictEffectsMode,
126
- NoStrictPassiveEffectsMode,
126
} from './ReactTypeOfMode';
127
import {
128
HostRoot,
@@ -4607,21 +4606,13 @@ function recursivelyTraverseAndDoubleInvokeEffectsInDEV(
4606
}
4607
4608
// Unconditionally disconnects and connects passive and layout effects.
4610
-function doubleInvokeEffectsOnFiber(
4611
- root: FiberRoot,
4612
- fiber: Fiber,
4613
- shouldDoubleInvokePassiveEffects: boolean = true,
4614
-) {
4609
+function doubleInvokeEffectsOnFiber(root: FiberRoot, fiber: Fiber) {
4610
setIsStrictModeForDevtools(true);
4611
try {
4612
disappearLayoutEffects(fiber);
4618
- if (shouldDoubleInvokePassiveEffects) {
4619
- disconnectPassiveEffect(fiber);
4620
- }
4613
+ disconnectPassiveEffect(fiber);
4614
reappearLayoutEffects(root, fiber.alternate, fiber, false);
4622
- if (shouldDoubleInvokePassiveEffects) {
4623
- reconnectPassiveEffects(root, fiber, NoLanes, null, false, 0);
4624
- }
4615
+ reconnectPassiveEffects(root, fiber, NoLanes, null, false, 0);
4616
} finally {
4617
setIsStrictModeForDevtools(false);
4618
}
@@ -4640,13 +4631,7 @@ function doubleInvokeEffectsInDEVIfNecessary(
4631
if (fiber.tag !== OffscreenComponent) {
4632
if (fiber.flags & PlacementDEV) {
4633
if (isInStrictMode) {
4643
- runWithFiberInDEV(
4644
- fiber,
4645
- doubleInvokeEffectsOnFiber,
4646
- root,
4647
- fiber,
4648
- (fiber.mode & NoStrictPassiveEffectsMode) === NoMode,
4649
- );
4634
+ runWithFiberInDEV(fiber, doubleInvokeEffectsOnFiber, root, fiber);
4635
}
4636
} else {
4637
recursivelyTraverseAndDoubleInvokeEffectsInDEV(
packages/react-reconciler/src/ReactTypeOfMode.js
-1
@@ -16,7 +16,6 @@ export const ProfileMode = /* */ 0b0000010;
16
//export const DebugTracingMode = /* */ 0b0000100; // Removed
17
export const StrictLegacyMode = /* */ 0b0001000;
18
export const StrictEffectsMode = /* */ 0b0010000;
19
-export const NoStrictPassiveEffectsMode = /* */ 0b1000000;
19
// Keep track of if we're in a SuspenseyImages eligible subtree.
20
// TODO: Remove this when enableSuspenseyImages ship where it's always on.
21
export const SuspenseyImagesMode = /* */ 0b0100000;
packages/react-reconciler/src/__tests__/ActivityStrictMode-test.js
-22
@@ -55,28 +55,6 @@ describe('Activity StrictMode', () => {
55
]);
56
});
57
58
- // @gate __DEV__ && enableActivity && enableDO_NOT_USE_disableStrictPassiveEffect
59
- it('does not trigger strict effects when disableStrictPassiveEffect is presented on StrictMode', async () => {
60
- await act(() => {
61
- ReactNoop.render(
62
- <React.StrictMode DO_NOT_USE_disableStrictPassiveEffect={true}>
63
- <Activity>
64
- <Component label="A" />
65
- </Activity>
66
- </React.StrictMode>,
67
- );
68
- });
69
-
70
- expect(log).toEqual([
71
- 'A: render',
72
- 'A: render',
73
- 'A: useLayoutEffect mount',
74
- 'A: useEffect mount',
75
- 'A: useLayoutEffect unmount',
76
- 'A: useLayoutEffect mount',
77
- ]);
78
- });
79
-
58
// @gate __DEV__ && enableActivity
59
it('should not trigger strict effects when offscreen is hidden', async () => {
60
await act(() => {
packages/react/src/__tests__/ReactStrictMode-test.internal.js
-46
@@ -104,52 +104,6 @@ describe('ReactStrictMode', () => {
104
]);
105
});
106
107
- // @gate enableDO_NOT_USE_disableStrictPassiveEffect
108
- it('should include legacy + strict effects mode, but not strict passive effect with disableStrictPassiveEffect', async () => {
109
- await act(() => {
110
- const container = document.createElement('div');
111
- const root = ReactDOMClient.createRoot(container);
112
- root.render(
113
- <React.StrictMode DO_NOT_USE_disableStrictPassiveEffect={true}>
114
- <Component label="A" />
115
- </React.StrictMode>,
116
- );
117
- });
118
-
119
- expect(log).toEqual([
120
- 'A: render',
121
- 'A: render',
122
- 'A: useLayoutEffect mount',
123
- 'A: useEffect mount',
124
- 'A: useLayoutEffect unmount',
125
- 'A: useLayoutEffect mount',
126
- ]);
127
- });
128
-
129
- // @gate enableDO_NOT_USE_disableStrictPassiveEffect
130
- it('should include legacy + strict effects mode, but not strict passive effect with disableStrictPassiveEffect in Suspense', async () => {
131
- await act(() => {
132
- const container = document.createElement('div');
133
- const root = ReactDOMClient.createRoot(container);
134
- root.render(
135
- <React.StrictMode DO_NOT_USE_disableStrictPassiveEffect={true}>
136
- <React.Suspense>
137
- <Component label="A" />
138
- </React.Suspense>
139
- </React.StrictMode>,
140
- );
141
- });
142
-
143
- expect(log).toEqual([
144
- 'A: render',
145
- 'A: render',
146
- 'A: useLayoutEffect mount',
147
- 'A: useEffect mount',
148
- 'A: useLayoutEffect unmount',
149
- 'A: useLayoutEffect mount',
150
- ]);
151
- });
152
-
107
it('should allow level to be increased with nesting', async () => {
108
await act(() => {
109
const container = document.createElement('div');
packages/shared/ReactFeatureFlags.js
-3
@@ -260,7 +260,4 @@ export const enableAsyncDebugInfo = __EXPERIMENTAL__;
260
// Track which Fiber(s) schedule render work.
261
export const enableUpdaterTracking = __PROFILE__;
262
263
-// Internal only.
264
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
265
-
263
export const ownerStackLimit = 1e4;
packages/shared/forks/ReactFeatureFlags.native-fb.js
-1
@@ -44,7 +44,6 @@ export const enableAsyncDebugInfo = false;
44
export const enableAsyncIterableChildren = false;
45
export const enableCPUSuspense = true;
46
export const enableCreateEventHandleAPI = false;
47
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
47
export const enableMoveBefore = true;
48
export const enableFizzExternalRuntime = true;
49
export const enableHalt = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
-1
@@ -29,7 +29,6 @@ export const enableAsyncDebugInfo = false;
29
export const enableAsyncIterableChildren = false;
30
export const enableCPUSuspense = false;
31
export const enableCreateEventHandleAPI = false;
32
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
32
export const enableMoveBefore = true;
33
export const enableFizzExternalRuntime = true;
34
export const enableHalt = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
-1
@@ -49,7 +49,6 @@ export const enableLegacyHidden = false;
49
50
export const enableTransitionTracing = false;
51
52
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
52
export const enableFizzExternalRuntime = true;
53
54
export const alwaysThrottleRetries = true;
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
-1
@@ -24,7 +24,6 @@ export const enableAsyncDebugInfo = false;
24
export const enableAsyncIterableChildren = false;
25
export const enableCPUSuspense = true;
26
export const enableCreateEventHandleAPI = false;
27
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
27
export const enableMoveBefore = false;
28
export const enableFizzExternalRuntime = true;
29
export const enableHalt = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
-1
@@ -50,7 +50,6 @@ export const enableLegacyHidden = false;
50
51
export const enableTransitionTracing = false;
52
53
-export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
53
export const enableFizzExternalRuntime = false;
54
55
export const alwaysThrottleRetries = true;
packages/shared/forks/ReactFeatureFlags.www-dynamic.js
-1
@@ -17,7 +17,6 @@ export const alwaysThrottleRetries = __VARIANT__;
17
export const disableDefaultPropsExceptForClasses = __VARIANT__;
18
export const disableLegacyContextForFunctionComponents = __VARIANT__;
19
export const disableSchedulerTimeoutInWorkLoop = __VARIANT__;
20
-export const enableDO_NOT_USE_disableStrictPassiveEffect = __VARIANT__;
20
export const enableHiddenSubtreeInsertionEffectCleanup = __VARIANT__;
21
export const enableNoCloningMemoCache = __VARIANT__;
22
export const enableObjectFiber = __VARIANT__;
packages/shared/forks/ReactFeatureFlags.www.js
-1
@@ -19,7 +19,6 @@ export const {
19
disableDefaultPropsExceptForClasses,
20
disableLegacyContextForFunctionComponents,
21
disableSchedulerTimeoutInWorkLoop,
22
- enableDO_NOT_USE_disableStrictPassiveEffect,
22
enableHiddenSubtreeInsertionEffectCleanup,
23
enableInfiniteRenderLoopDetection,
24
enableNoCloningMemoCache,