From 9e67e7a31582079263665fac0391220b99d8bb86 Mon Sep 17 00:00:00 2001 From: Joseph Savona Date: Tue, 23 Aug 2022 01:36:02 -0700 Subject: [PATCH] Scaffolding for useMemoCache hook (#25123) * Scaffolding for useMemoCache hook * cleanup leftovers from copy/paste of use() diff Co-authored-by: Andrew Clark --- .../src/ReactFiberHooks.new.js | 53 +++++++++++++++++++ .../src/ReactFiberHooks.old.js | 53 +++++++++++++++++++ .../src/ReactInternalTypes.js | 1 + packages/react-server/src/ReactFizzHooks.js | 9 +++- packages/react-server/src/ReactFlightHooks.js | 3 ++ .../src/ReactSuspenseTestUtils.js | 1 + packages/react/index.classic.fb.js | 1 + packages/react/index.experimental.js | 1 + packages/react/index.js | 1 + packages/react/index.modern.fb.js | 1 + packages/react/src/React.js | 2 + packages/react/src/ReactHooks.js | 6 +++ packages/shared/ReactFeatureFlags.js | 4 ++ .../forks/ReactFeatureFlags.native-fb.js | 1 + .../forks/ReactFeatureFlags.native-oss.js | 1 + .../forks/ReactFeatureFlags.test-renderer.js | 1 + .../ReactFeatureFlags.test-renderer.native.js | 1 + .../ReactFeatureFlags.test-renderer.www.js | 1 + .../shared/forks/ReactFeatureFlags.testing.js | 1 + .../forks/ReactFeatureFlags.testing.www.js | 1 + .../shared/forks/ReactFeatureFlags.www.js | 1 + 21 files changed, 143 insertions(+), 1 deletion(-) diff --git a/packages/react-reconciler/src/ReactFiberHooks.new.js b/packages/react-reconciler/src/ReactFiberHooks.new.js index 4cc4dda6fa611..074bad71b3bc1 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.new.js +++ b/packages/react-reconciler/src/ReactFiberHooks.new.js @@ -32,6 +32,7 @@ import { enableLazyContextPropagation, enableUseMutableSource, enableTransitionTracing, + enableUseMemoCacheHook, } from 'shared/ReactFeatureFlags'; import { @@ -721,6 +722,10 @@ function createFunctionComponentUpdateQueue(): FunctionComponentUpdateQueue { }; } +function useMemoCache(size: number): Array { + throw new Error('Not implemented.'); +} + function basicStateReducer(state: S, action: BasicStateAction): S { // $FlowFixMe: Flow doesn't like mixed types return typeof action === 'function' ? action(state) : action; @@ -2416,6 +2421,9 @@ if (enableCache) { (ContextOnlyDispatcher: Dispatcher).getCacheForType = getCacheForType; (ContextOnlyDispatcher: Dispatcher).useCacheRefresh = throwInvalidHookError; } +if (enableUseMemoCacheHook) { + (ContextOnlyDispatcher: Dispatcher).useMemoCache = throwInvalidHookError; +} const HooksDispatcherOnMount: Dispatcher = { readContext, @@ -2444,6 +2452,9 @@ if (enableCache) { (HooksDispatcherOnMount: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnMount: Dispatcher).useCacheRefresh = mountRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnMount: Dispatcher).useMemoCache = useMemoCache; +} const HooksDispatcherOnUpdate: Dispatcher = { readContext, @@ -2471,6 +2482,9 @@ if (enableCache) { (HooksDispatcherOnUpdate: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnUpdate: Dispatcher).useCacheRefresh = updateRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnUpdate: Dispatcher).useMemoCache = useMemoCache; +} const HooksDispatcherOnRerender: Dispatcher = { readContext, @@ -2499,6 +2513,9 @@ if (enableCache) { (HooksDispatcherOnRerender: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnRerender: Dispatcher).useCacheRefresh = updateRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnRerender: Dispatcher).useMemoCache = useMemoCache; +} let HooksDispatcherOnMountInDEV: Dispatcher | null = null; let HooksDispatcherOnMountWithHookTypesInDEV: Dispatcher | null = null; @@ -2674,6 +2691,9 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnMountInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnMountWithHookTypesInDEV = { readContext(context: ReactContext): T { @@ -2816,6 +2836,9 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnMountWithHookTypesInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnUpdateInDEV = { readContext(context: ReactContext): T { @@ -2958,6 +2981,9 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnUpdateInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnRerenderInDEV = { readContext(context: ReactContext): T { @@ -3101,6 +3127,9 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnRerenderInDEV: Dispatcher).useMemoCache = useMemoCache; + } InvalidNestedHooksDispatcherOnMountInDEV = { readContext(context: ReactContext): T { @@ -3260,6 +3289,14 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnMountInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } InvalidNestedHooksDispatcherOnUpdateInDEV = { readContext(context: ReactContext): T { @@ -3419,6 +3456,14 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnUpdateInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } InvalidNestedHooksDispatcherOnRerenderInDEV = { readContext(context: ReactContext): T { @@ -3579,4 +3624,12 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnRerenderInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } } diff --git a/packages/react-reconciler/src/ReactFiberHooks.old.js b/packages/react-reconciler/src/ReactFiberHooks.old.js index c3cb1ed820169..9e461e54678b0 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.old.js +++ b/packages/react-reconciler/src/ReactFiberHooks.old.js @@ -32,6 +32,7 @@ import { enableLazyContextPropagation, enableUseMutableSource, enableTransitionTracing, + enableUseMemoCacheHook, } from 'shared/ReactFeatureFlags'; import { @@ -721,6 +722,10 @@ function createFunctionComponentUpdateQueue(): FunctionComponentUpdateQueue { }; } +function useMemoCache(size: number): Array { + throw new Error('Not implemented.'); +} + function basicStateReducer(state: S, action: BasicStateAction): S { // $FlowFixMe: Flow doesn't like mixed types return typeof action === 'function' ? action(state) : action; @@ -2416,6 +2421,9 @@ if (enableCache) { (ContextOnlyDispatcher: Dispatcher).getCacheForType = getCacheForType; (ContextOnlyDispatcher: Dispatcher).useCacheRefresh = throwInvalidHookError; } +if (enableUseMemoCacheHook) { + (ContextOnlyDispatcher: Dispatcher).useMemoCache = throwInvalidHookError; +} const HooksDispatcherOnMount: Dispatcher = { readContext, @@ -2444,6 +2452,9 @@ if (enableCache) { (HooksDispatcherOnMount: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnMount: Dispatcher).useCacheRefresh = mountRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnMount: Dispatcher).useMemoCache = useMemoCache; +} const HooksDispatcherOnUpdate: Dispatcher = { readContext, @@ -2471,6 +2482,9 @@ if (enableCache) { (HooksDispatcherOnUpdate: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnUpdate: Dispatcher).useCacheRefresh = updateRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnUpdate: Dispatcher).useMemoCache = useMemoCache; +} const HooksDispatcherOnRerender: Dispatcher = { readContext, @@ -2499,6 +2513,9 @@ if (enableCache) { (HooksDispatcherOnRerender: Dispatcher).getCacheForType = getCacheForType; (HooksDispatcherOnRerender: Dispatcher).useCacheRefresh = updateRefresh; } +if (enableUseMemoCacheHook) { + (HooksDispatcherOnRerender: Dispatcher).useMemoCache = useMemoCache; +} let HooksDispatcherOnMountInDEV: Dispatcher | null = null; let HooksDispatcherOnMountWithHookTypesInDEV: Dispatcher | null = null; @@ -2674,6 +2691,9 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnMountInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnMountWithHookTypesInDEV = { readContext(context: ReactContext): T { @@ -2816,6 +2836,9 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnMountWithHookTypesInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnUpdateInDEV = { readContext(context: ReactContext): T { @@ -2958,6 +2981,9 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnUpdateInDEV: Dispatcher).useMemoCache = useMemoCache; + } HooksDispatcherOnRerenderInDEV = { readContext(context: ReactContext): T { @@ -3101,6 +3127,9 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (HooksDispatcherOnRerenderInDEV: Dispatcher).useMemoCache = useMemoCache; + } InvalidNestedHooksDispatcherOnMountInDEV = { readContext(context: ReactContext): T { @@ -3260,6 +3289,14 @@ if (__DEV__) { return mountRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnMountInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } InvalidNestedHooksDispatcherOnUpdateInDEV = { readContext(context: ReactContext): T { @@ -3419,6 +3456,14 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnUpdateInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } InvalidNestedHooksDispatcherOnRerenderInDEV = { readContext(context: ReactContext): T { @@ -3579,4 +3624,12 @@ if (__DEV__) { return updateRefresh(); }; } + if (enableUseMemoCacheHook) { + (InvalidNestedHooksDispatcherOnRerenderInDEV: Dispatcher).useMemoCache = function( + size: number, + ): Array { + warnInvalidHookAccess(); + return useMemoCache(size); + }; + } } diff --git a/packages/react-reconciler/src/ReactInternalTypes.js b/packages/react-reconciler/src/ReactInternalTypes.js index e017674dda205..e9a4b61039f66 100644 --- a/packages/react-reconciler/src/ReactInternalTypes.js +++ b/packages/react-reconciler/src/ReactInternalTypes.js @@ -403,6 +403,7 @@ export type Dispatcher = {| ): T, useId(): string, useCacheRefresh?: () => (?() => T, ?T) => void, + useMemoCache?: (size: number) => Array, unstable_isNewReconciler?: boolean, |}; diff --git a/packages/react-server/src/ReactFizzHooks.js b/packages/react-server/src/ReactFizzHooks.js index c3ffa8cd6abd8..960800e903c2c 100644 --- a/packages/react-server/src/ReactFizzHooks.js +++ b/packages/react-server/src/ReactFizzHooks.js @@ -25,7 +25,7 @@ import {getTreeId} from './ReactFizzTreeContext'; import {makeId} from './ReactServerFormatConfig'; -import {enableCache} from 'shared/ReactFeatureFlags'; +import {enableCache, enableUseMemoCacheHook} from 'shared/ReactFeatureFlags'; import is from 'shared/objectIs'; type BasicStateAction = (S => S) | S; @@ -537,6 +537,10 @@ function useCacheRefresh(): (?() => T, ?T) => void { return unsupportedRefresh; } +function useMemoCache(size: number): Array { + return new Array(size); +} + function noop(): void {} export const Dispatcher: DispatcherType = { @@ -567,6 +571,9 @@ if (enableCache) { Dispatcher.getCacheForType = getCacheForType; Dispatcher.useCacheRefresh = useCacheRefresh; } +if (enableUseMemoCacheHook) { + Dispatcher.useMemoCache = useMemoCache; +} export let currentResponseState: null | ResponseState = (null: any); export function setCurrentResponseState( diff --git a/packages/react-server/src/ReactFlightHooks.js b/packages/react-server/src/ReactFlightHooks.js index 5b10d8c7a1f61..a9782c712aca2 100644 --- a/packages/react-server/src/ReactFlightHooks.js +++ b/packages/react-server/src/ReactFlightHooks.js @@ -78,6 +78,9 @@ export const Dispatcher: DispatcherType = { useCacheRefresh(): (?() => T, ?T) => void { return unsupportedRefresh; }, + useMemoCache(size: number): Array { + return new Array(size); + }, }; function unsupportedHook(): void { diff --git a/packages/react-suspense-test-utils/src/ReactSuspenseTestUtils.js b/packages/react-suspense-test-utils/src/ReactSuspenseTestUtils.js index d75f1f7c9b453..abd6cb5779b49 100644 --- a/packages/react-suspense-test-utils/src/ReactSuspenseTestUtils.js +++ b/packages/react-suspense-test-utils/src/ReactSuspenseTestUtils.js @@ -46,6 +46,7 @@ export function waitForSuspense(fn: () => T): Promise { useMutableSource: unsupported, useSyncExternalStore: unsupported, useCacheRefresh: unsupported, + useMemoCache: unsupported, }; // Not using async/await because we don't compile it. return new Promise((resolve, reject) => { diff --git a/packages/react/index.classic.fb.js b/packages/react/index.classic.fb.js index 0a2795a626516..65cc12a7cfc25 100644 --- a/packages/react/index.classic.fb.js +++ b/packages/react/index.classic.fb.js @@ -42,6 +42,7 @@ export { unstable_getCacheSignal, unstable_getCacheForType, unstable_useCacheRefresh, + unstable_useMemoCache, useId, useCallback, useContext, diff --git a/packages/react/index.experimental.js b/packages/react/index.experimental.js index 287c137298815..7bfb6bc21f059 100644 --- a/packages/react/index.experimental.js +++ b/packages/react/index.experimental.js @@ -35,6 +35,7 @@ export { unstable_getCacheSignal, unstable_getCacheForType, unstable_useCacheRefresh, + unstable_useMemoCache, useId, useCallback, useContext, diff --git a/packages/react/index.js b/packages/react/index.js index 084aabb53c6bf..77cd739625b9f 100644 --- a/packages/react/index.js +++ b/packages/react/index.js @@ -63,6 +63,7 @@ export { unstable_getCacheSignal, unstable_getCacheForType, unstable_useCacheRefresh, + unstable_useMemoCache, useId, useCallback, useContext, diff --git a/packages/react/index.modern.fb.js b/packages/react/index.modern.fb.js index e9f80ade06105..e9e4202d7ae57 100644 --- a/packages/react/index.modern.fb.js +++ b/packages/react/index.modern.fb.js @@ -40,6 +40,7 @@ export { unstable_getCacheSignal, unstable_getCacheForType, unstable_useCacheRefresh, + unstable_useMemoCache, useId, useCallback, useContext, diff --git a/packages/react/src/React.js b/packages/react/src/React.js index 264c1e1dc56d0..701c4d1781c1c 100644 --- a/packages/react/src/React.js +++ b/packages/react/src/React.js @@ -55,6 +55,7 @@ import { useDeferredValue, useId, useCacheRefresh, + useMemoCache, } from './ReactHooks'; import { createElementWithValidation, @@ -127,6 +128,7 @@ export { getCacheForType as unstable_getCacheForType, useCacheRefresh as unstable_useCacheRefresh, REACT_CACHE_TYPE as unstable_Cache, + useMemoCache as unstable_useMemoCache, // enableScopeAPI REACT_SCOPE_TYPE as unstable_Scope, // enableTransitionTracing diff --git a/packages/react/src/ReactHooks.js b/packages/react/src/ReactHooks.js index 9dc7a98589e4e..197edfaedc559 100644 --- a/packages/react/src/ReactHooks.js +++ b/packages/react/src/ReactHooks.js @@ -204,3 +204,9 @@ export function useCacheRefresh(): (?() => T, ?T) => void { // $FlowFixMe This is unstable, thus optional return dispatcher.useCacheRefresh(); } + +export function useMemoCache(size: number): Array { + const dispatcher = resolveDispatcher(); + // $FlowFixMe This is unstable, thus optional + return dispatcher.useMemoCache(size); +} diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 98c9b53dcab2f..0bd4fc6c04abb 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -118,6 +118,10 @@ export const deletedTreeCleanUpLevel = 3; export const enableFloat = __EXPERIMENTAL__; +// Enables unstable_useMemoCache hook, intended as a compilation target for +// auto-memoization. +export const enableUseMemoCacheHook = __EXPERIMENTAL__; + // ----------------------------------------------------------------------------- // Chopping Block // diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index 3b54f76f1a525..ec5ae1bf63a75 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -50,6 +50,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = true; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index fc125d4110737..2ed90a83b9a59 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -40,6 +40,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = false; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index cbdd24ef5a901..81992652fe96b 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -40,6 +40,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = false; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js index ec4e9deddc726..5d6eba8f7fbe4 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js @@ -49,6 +49,7 @@ export const deferRenderPhaseUpdateToNextBatch = false; export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = false; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableStrictEffects = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 6fd3a292861f0..5e7caa5fa6cd8 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -40,6 +40,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = true; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = false; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = true; diff --git a/packages/shared/forks/ReactFeatureFlags.testing.js b/packages/shared/forks/ReactFeatureFlags.testing.js index 0faa78126ee5f..84a2d4f84ac8b 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.js @@ -40,6 +40,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = false; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = false; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = true; diff --git a/packages/shared/forks/ReactFeatureFlags.testing.www.js b/packages/shared/forks/ReactFeatureFlags.testing.www.js index b987da6c350b8..040e2caa2c163 100644 --- a/packages/shared/forks/ReactFeatureFlags.testing.www.js +++ b/packages/shared/forks/ReactFeatureFlags.testing.www.js @@ -40,6 +40,7 @@ export const warnAboutSpreadingKeyToJSX = false; export const enableSuspenseAvoidThisFallback = true; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = true; +export const enableUseMemoCacheHook = false; export const enableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay = true; export const enableClientRenderFallbackOnTextMismatch = true; export const enableComponentStackLocations = true; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index 4876ac1ff30ec..90a3f9007cd6c 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -53,6 +53,7 @@ export const enableSuspenseAvoidThisFallback = true; export const enableSuspenseAvoidThisFallbackFizz = false; export const enableCPUSuspense = true; export const enableFloat = false; +export const enableUseMemoCacheHook = true; // Logs additional User Timing API marks for use with an experimental profiling tool. export const enableSchedulingProfiler =