@samitouri / QOS-React / commits / 5d24c64cc9

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,