diff --git a/packages/react-dom-bindings/src/client/validateDOMNesting.js b/packages/react-dom-bindings/src/client/validateDOMNesting.js index 49d8b5c158f62..d6fdc5e857ed3 100644 --- a/packages/react-dom-bindings/src/client/validateDOMNesting.js +++ b/packages/react-dom-bindings/src/client/validateDOMNesting.js @@ -297,6 +297,8 @@ function isTagValidWithParent(tag: string, parentTag: ?string): boolean { tag === 'hr' || tag === 'option' || tag === 'optgroup' || + tag === 'script' || + tag === 'template' || tag === '#text' ); case 'optgroup': diff --git a/packages/react-reconciler/src/ReactFiberBeginWork.js b/packages/react-reconciler/src/ReactFiberBeginWork.js index 632b2df70c097..71affb7ca7a44 100644 --- a/packages/react-reconciler/src/ReactFiberBeginWork.js +++ b/packages/react-reconciler/src/ReactFiberBeginWork.js @@ -92,7 +92,6 @@ import { DidDefer, } from './ReactFiberFlags'; import { - debugRenderPhaseSideEffectsForStrictMode, disableLegacyContext, disableLegacyContextForFunctionComponents, enableProfilerCommitHooks, @@ -1375,10 +1374,7 @@ function finishClassComponent( } if (__DEV__) { nextChildren = callRenderInDEV(instance); - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { callRenderInDEV(instance); diff --git a/packages/react-reconciler/src/ReactFiberClassComponent.js b/packages/react-reconciler/src/ReactFiberClassComponent.js index 7ebf0fb9f4b92..d0490b7e02d4e 100644 --- a/packages/react-reconciler/src/ReactFiberClassComponent.js +++ b/packages/react-reconciler/src/ReactFiberClassComponent.js @@ -18,7 +18,6 @@ import { MountLayoutDev, } from './ReactFiberFlags'; import { - debugRenderPhaseSideEffectsForStrictMode, disableLegacyContext, enableSchedulingProfiler, disableDefaultPropsExceptForClasses, @@ -138,10 +137,7 @@ function applyDerivedStateFromProps( const prevState = workInProgress.memoizedState; let partialState = getDerivedStateFromProps(nextProps, prevState); if (__DEV__) { - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { // Invoke the function an extra time to help detect side-effects. @@ -266,10 +262,7 @@ function checkShouldComponentUpdate( nextContext, ); if (__DEV__) { - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { // Invoke the function an extra time to help detect side-effects. @@ -598,10 +591,7 @@ function constructClassInstance( let instance = new ctor(props, context); // Instantiate twice to help detect side-effects. if (__DEV__) { - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { instance = new ctor(props, context); diff --git a/packages/react-reconciler/src/ReactFiberClassUpdateQueue.js b/packages/react-reconciler/src/ReactFiberClassUpdateQueue.js index 7945e4fb1c915..23bef1e6b0983 100644 --- a/packages/react-reconciler/src/ReactFiberClassUpdateQueue.js +++ b/packages/react-reconciler/src/ReactFiberClassUpdateQueue.js @@ -110,8 +110,6 @@ import { } from './ReactFiberFlags'; import getComponentNameFromFiber from './getComponentNameFromFiber'; -import {debugRenderPhaseSideEffectsForStrictMode} from 'shared/ReactFeatureFlags'; - import {StrictLegacyMode} from './ReactTypeOfMode'; import { markSkippedUpdateLanes, @@ -402,10 +400,7 @@ function getStateFromUpdate( } const nextState = payload.call(instance, prevState, nextProps); if (__DEV__) { - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { payload.call(instance, prevState, nextProps); @@ -435,10 +430,7 @@ function getStateFromUpdate( } partialState = payload.call(instance, prevState, nextProps); if (__DEV__) { - if ( - debugRenderPhaseSideEffectsForStrictMode && - workInProgress.mode & StrictLegacyMode - ) { + if (workInProgress.mode & StrictLegacyMode) { setIsStrictModeForDevtools(true); try { payload.call(instance, prevState, nextProps); diff --git a/packages/react-reconciler/src/ReactFiberHooks.js b/packages/react-reconciler/src/ReactFiberHooks.js index 99dbea044690f..e76b78b2ce2a8 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.js +++ b/packages/react-reconciler/src/ReactFiberHooks.js @@ -40,7 +40,6 @@ import { enableUseEffectEventHook, enableUseResourceEffectHook, enableLegacyCache, - debugRenderPhaseSideEffectsForStrictMode, disableLegacyMode, enableNoCloningMemoCache, } from 'shared/ReactFeatureFlags'; @@ -623,9 +622,7 @@ export function renderWithHooks( // // There are plenty of tests to ensure this behavior is correct. const shouldDoubleRenderDEV = - __DEV__ && - debugRenderPhaseSideEffectsForStrictMode && - (workInProgress.mode & StrictLegacyMode) !== NoMode; + __DEV__ && (workInProgress.mode & StrictLegacyMode) !== NoMode; shouldDoubleInvokeUserFnsInHooksDEV = shouldDoubleRenderDEV; let children = __DEV__ diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.js b/packages/react-reconciler/src/ReactFiberWorkLoop.js index a71eb543cfe5d..7377f605a8811 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.js @@ -32,7 +32,6 @@ import { enableSchedulingProfiler, enableUpdaterTracking, enableTransitionTracing, - useModernStrictMode, disableLegacyContext, alwaysThrottleRetries, enableInfiniteRenderLoopDetection, @@ -4205,7 +4204,7 @@ function commitDoubleInvokeEffectsInDEV( hasPassiveEffects: boolean, ) { if (__DEV__) { - if (useModernStrictMode && (disableLegacyMode || root.tag !== LegacyRoot)) { + if (disableLegacyMode || root.tag !== LegacyRoot) { let doubleInvokeEffects = true; if ( diff --git a/packages/react-reconciler/src/__tests__/ActivityStrictMode-test.js b/packages/react-reconciler/src/__tests__/ActivityStrictMode-test.js index 85365d3e708fc..12b319080de5c 100644 --- a/packages/react-reconciler/src/__tests__/ActivityStrictMode-test.js +++ b/packages/react-reconciler/src/__tests__/ActivityStrictMode-test.js @@ -77,7 +77,7 @@ describe('Activity StrictMode', () => { ]); }); - // @gate __DEV__ && enableActivity && useModernStrictMode + // @gate __DEV__ && enableActivity it('should not trigger strict effects when offscreen is hidden', async () => { await act(() => { ReactNoop.render( diff --git a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js index 556e0559728e7..8b0e903a839e9 100644 --- a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js @@ -13,7 +13,6 @@ 'use strict'; let React; -let ReactFeatureFlags; let ReactTestRenderer; let Scheduler; let ReactDOMServer; @@ -26,8 +25,6 @@ let waitForThrow; describe('ReactHooks', () => { beforeEach(() => { jest.resetModules(); - ReactFeatureFlags = require('shared/ReactFeatureFlags'); - React = require('react'); ReactTestRenderer = require('react-test-renderer'); Scheduler = require('scheduler'); @@ -1240,8 +1237,6 @@ describe('ReactHooks', () => { }); it('double-invokes components with Hooks in Strict Mode', async () => { - ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = true; - const {useState, StrictMode} = React; let renderCount = 0; @@ -1459,7 +1454,6 @@ describe('ReactHooks', () => { }); it('double-invokes useMemo in DEV StrictMode despite []', async () => { - ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = true; const {useMemo, StrictMode} = React; let useMemoCount = 0; diff --git a/packages/react-reconciler/src/__tests__/ReactUpdaters-test.internal.js b/packages/react-reconciler/src/__tests__/ReactUpdaters-test.internal.js index 3f7fcd28aec3d..3aa76b0c2ddfa 100644 --- a/packages/react-reconciler/src/__tests__/ReactUpdaters-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactUpdaters-test.internal.js @@ -34,7 +34,6 @@ describe('updaters', () => { ReactFeatureFlags = require('shared/ReactFeatureFlags'); ReactFeatureFlags.enableUpdaterTracking = true; - ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false; mockDevToolsHook = { injectInternals: jest.fn(() => {}), diff --git a/packages/react-reconciler/src/__tests__/StrictEffectsMode-test.js b/packages/react-reconciler/src/__tests__/StrictEffectsMode-test.js index 0ce01a650c323..0c7e75c39a4a5 100644 --- a/packages/react-reconciler/src/__tests__/StrictEffectsMode-test.js +++ b/packages/react-reconciler/src/__tests__/StrictEffectsMode-test.js @@ -945,34 +945,25 @@ describe('StrictEffectsMode', () => { shouldSuspend = false; }); - if (gate(flags => flags.useModernStrictMode)) { - expect(log).toEqual([ - 'Child rendered', - 'Child rendered', - // !!! Committed, destroy and create effect. - // !!! The other effect is not destroyed and created - // !!! because the dep didn't change - 'Child dep destroy', - 'Child dep create', - - // Double invoke both effects - 'Child destroy', - 'Child dep destroy', - 'Child create', - 'Child dep create', - // Fires setState - '-----------------------after setState', - 'Child rendered', - 'Child rendered', - 'Child dep create', - ]); - } else { - expect(log).toEqual([ - 'Child rendered', - 'Child rendered', - 'Child dep destroy', - 'Child dep create', - ]); - } + expect(log).toEqual([ + 'Child rendered', + 'Child rendered', + // !!! Committed, destroy and create effect. + // !!! The other effect is not destroyed and created + // !!! because the dep didn't change + 'Child dep destroy', + 'Child dep create', + + // Double invoke both effects + 'Child destroy', + 'Child dep destroy', + 'Child create', + 'Child dep create', + // Fires setState + '-----------------------after setState', + 'Child rendered', + 'Child rendered', + 'Child dep create', + ]); }); }); diff --git a/packages/react-reconciler/src/__tests__/StrictEffectsModeDefaults-test.internal.js b/packages/react-reconciler/src/__tests__/StrictEffectsModeDefaults-test.internal.js index c9f65a20a0c7b..5829cd0904266 100644 --- a/packages/react-reconciler/src/__tests__/StrictEffectsModeDefaults-test.internal.js +++ b/packages/react-reconciler/src/__tests__/StrictEffectsModeDefaults-test.internal.js @@ -461,7 +461,6 @@ describe('StrictEffectsMode defaults', () => { expect(log).toEqual([]); }); - //@gate useModernStrictMode it('disconnects refs during double invoking', async () => { const onRefMock = jest.fn(); function App({text}) { diff --git a/packages/react-reconciler/src/__tests__/useRef-test.internal.js b/packages/react-reconciler/src/__tests__/useRef-test.internal.js index 19a8d29211df0..2a6ab6ab58cca 100644 --- a/packages/react-reconciler/src/__tests__/useRef-test.internal.js +++ b/packages/react-reconciler/src/__tests__/useRef-test.internal.js @@ -28,9 +28,6 @@ describe('useRef', () => { ReactNoop = require('react-noop-renderer'); Scheduler = require('scheduler'); - const ReactFeatureFlags = require('shared/ReactFeatureFlags'); - ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false; - act = require('internal-test-utils').act; useCallback = React.useCallback; useEffect = React.useEffect; diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReplyEdge-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReplyEdge-test.js index 0c6ec9599e1e2..f6157dff171d7 100644 --- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReplyEdge-test.js +++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReplyEdge-test.js @@ -245,4 +245,31 @@ describe('ReactFlightDOMReplyEdge', () => { ), ); }); + + it('should abort when parsing an incomplete payload', async () => { + const infinitePromise = new Promise(() => {}); + const controller = new AbortController(); + const promiseForResult = ReactServerDOMClient.encodeReply( + {promise: infinitePromise}, + { + signal: controller.signal, + }, + ); + controller.abort(); + const body = await promiseForResult; + + const decoded = await ReactServerDOMServer.decodeReply( + body, + webpackServerMap, + ); + + let error = null; + try { + await decoded.promise; + } catch (x) { + error = x; + } + expect(error).not.toBe(null); + expect(error.message).toBe('Connection closed.'); + }); }); diff --git a/packages/react-server/src/ReactFlightReplyServer.js b/packages/react-server/src/ReactFlightReplyServer.js index 930998ea3d889..4db7571bb66a6 100644 --- a/packages/react-server/src/ReactFlightReplyServer.js +++ b/packages/react-server/src/ReactFlightReplyServer.js @@ -169,6 +169,8 @@ export type Response = { _prefix: string, _formData: FormData, _chunks: Map>, + _closed: boolean, + _closedReason: mixed, _temporaryReferences: void | TemporaryReferenceSet, }; @@ -255,6 +257,14 @@ function createResolvedModelChunk( return new Chunk(RESOLVED_MODEL, value, id, response); } +function createErroredChunk( + response: Response, + reason: mixed, +): ErroredChunk { + // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors + return new Chunk(ERRORED, null, reason, response); +} + function resolveModelChunk( chunk: SomeChunk, value: string, @@ -493,6 +503,8 @@ function initializeModelChunk(chunk: ResolvedModelChunk): void { // Report that any missing chunks in the model is now going to throw this // error upon read. Also notify any pending promises. export function reportGlobalError(response: Response, error: Error): void { + response._closed = true; + response._closedReason = error; response._chunks.forEach(chunk => { // If this chunk was already resolved or errored, it won't // trigger an error but if it wasn't then we need to @@ -514,6 +526,10 @@ function getChunk(response: Response, id: number): SomeChunk { if (backingEntry != null) { // We assume that this is a string entry for now. chunk = createResolvedModelChunk(response, (backingEntry: any), id); + } else if (response._closed) { + // We have already errored the response and we're not going to get + // anything more streaming in so this will immediately error. + chunk = createErroredChunk(response, response._closedReason); } else { // We're still waiting on this entry to stream in. chunk = createPendingChunk(response); @@ -1082,6 +1098,8 @@ export function createResponse( _prefix: formFieldPrefix, _formData: backingFormData, _chunks: chunks, + _closed: false, + _closedReason: null, _temporaryReferences: temporaryReferences, }; return response; diff --git a/packages/react/src/__tests__/ReactStrictMode-test.js b/packages/react/src/__tests__/ReactStrictMode-test.js index 863f84ebdb291..f28c70a871665 100644 --- a/packages/react/src/__tests__/ReactStrictMode-test.js +++ b/packages/react/src/__tests__/ReactStrictMode-test.js @@ -202,7 +202,7 @@ describe('ReactStrictMode', () => { expect(instance.state.count).toBe(2); }); - // @gate debugRenderPhaseSideEffectsForStrictMode + // @gate __DEV__ it('double invokes useState and useReducer initializers functions', async () => { const log = []; @@ -390,7 +390,7 @@ describe('ReactStrictMode', () => { expect(instance.state.count).toBe(2); }); - // @gate debugRenderPhaseSideEffectsForStrictMode + // @gate __DEV__ it('double invokes useMemo functions', async () => { let log = []; @@ -436,7 +436,7 @@ describe('ReactStrictMode', () => { ]); }); - // @gate debugRenderPhaseSideEffectsForStrictMode + // @gate __DEV__ it('double invokes useMemo functions with first result', async () => { let log = []; function Uppercased({text}) { @@ -499,7 +499,7 @@ describe('ReactStrictMode', () => { expect(log[2]).toBe(log[3]); }); - // @gate debugRenderPhaseSideEffectsForStrictMode + // @gate __DEV__ it('double invokes setState updater functions', async () => { const log = []; @@ -532,7 +532,7 @@ describe('ReactStrictMode', () => { expect(log).toEqual(['Compute count: 1', 'Compute count: 1']); }); - // @gate debugRenderPhaseSideEffectsForStrictMode + // @gate __DEV__ it('double invokes reducer functions', async () => { const log = []; diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 8540d6e14721a..3046f8f4cb45e 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -186,12 +186,6 @@ export const disableLegacyContext = true; */ export const disableLegacyContextForFunctionComponents = true; -// Not ready to break experimental yet. -// Modern behaviour aligns more with what components -// components will encounter in production, especially when used With . -// TODO: clean up legacy once tests pass WWW. -export const useModernStrictMode = true; - // Enable the moveBefore() alternative to insertBefore(). This preserves states of moves. export const enableMoveBefore = false; @@ -240,10 +234,6 @@ export const disableTextareaChildren = false; // Debugging and DevTools // ----------------------------------------------------------------------------- -// Helps identify side effects in render-phase lifecycle hooks and setState -// reducers by double invoking them in StrictLegacyMode. -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; - // Gather advanced timing metrics for Profiler subtrees. export const enableProfilerTimer = __PROFILE__; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index 45807e9d876af..4ea9499e6ca80 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -32,7 +32,6 @@ export const { } = dynamicFlags; // The rest of the flags are static for better dead code elimination. -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const disableClientCache = true; export const disableCommentsAsDOMContainers = true; export const disableDefaultPropsExceptForClasses = true; @@ -80,7 +79,6 @@ export const renameElementSymbol = false; export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; export const transitionLaneExpirationMs = 5000; -export const useModernStrictMode = true; export const enableHydrationLaneScheduling = true; export const enableYieldingBeforePassive = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index c29da18a42055..dddd80aeea82a 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -12,12 +12,8 @@ import typeof * as ExportsType from './ReactFeatureFlags.native-oss'; // TODO: Align these flags with canary and delete this file once RN ships from Canary. -// DEV-only but enabled in the next RN Major. -// Not supported by flag script to avoid the special case. -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; - // ----------------------------------------------------------------------------- -// All other flags +// All flags // ----------------------------------------------------------------------------- export const alwaysThrottleRetries = false; export const disableClientCache = true; @@ -70,7 +66,6 @@ export const renameElementSymbol = true; export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; export const transitionLaneExpirationMs = 5000; -export const useModernStrictMode = true; export const enableSiblingPrerendering = true; export const enableUseResourceEffectHook = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index df58c53eda9a4..95826007dc9cd 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -10,7 +10,6 @@ import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags'; import typeof * as ExportsType from './ReactFeatureFlags.test-renderer'; -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const enableAsyncDebugInfo = false; export const enableSchedulingProfiler = false; export const enableProfilerTimer = __PROFILE__; @@ -52,7 +51,6 @@ export const enableLegacyHidden = false; export const enableTransitionTracing = false; -export const useModernStrictMode = true; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableFizzExternalRuntime = true; export const enableDeferRootSchedulingToMicrotask = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js index a4dc5cb76d109..8d38112b16879 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js @@ -11,7 +11,6 @@ import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags'; import typeof * as ExportsType from './ReactFeatureFlags.test-renderer'; export const alwaysThrottleRetries = false; -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const disableClientCache = true; export const disableCommentsAsDOMContainers = true; export const disableDefaultPropsExceptForClasses = true; @@ -65,7 +64,6 @@ export const renameElementSymbol = false; export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; export const transitionLaneExpirationMs = 5000; -export const useModernStrictMode = true; export const enableFabricCompleteRootInCommitPhase = false; export const enableSiblingPrerendering = true; export const enableUseResourceEffectHook = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index e7c92602a0abf..28a303a034cac 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -10,7 +10,6 @@ import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags'; import typeof * as ExportsType from './ReactFeatureFlags.test-renderer.www'; -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const enableAsyncDebugInfo = false; export const enableSchedulingProfiler = false; export const enableProfilerTimer = __PROFILE__; @@ -54,7 +53,6 @@ export const enableLegacyHidden = false; export const enableTransitionTracing = false; -export const useModernStrictMode = true; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableFizzExternalRuntime = false; export const enableDeferRootSchedulingToMicrotask = true; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index da62754a13359..cf514f93d43ac 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -42,7 +42,6 @@ export const { // On WWW, __EXPERIMENTAL__ is used for a new modern build. // It's not used anywhere in production yet. -export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const enableProfilerTimer = __PROFILE__; export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; @@ -106,7 +105,6 @@ export const disableClientCache = true; export const enableServerComponentLogs = true; export const enableReactTestRendererWarning = false; -export const useModernStrictMode = true; export const disableLegacyMode = true;