Put hooks behind feature flag
Andrew Clark committed
Sep 5, 2018 at 17:20 UTC
105f2de545dc9e374ed4ac55b3628eeeb555f4a6
12 files changed
+25
-9
packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js
+1
@@ -29,6 +29,7 @@ describe('ReactHooks', () => {
29
jest.resetModules();
30
ReactFeatureFlags = require('shared/ReactFeatureFlags');
31
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
32
+ ReactFeatureFlags.enableHooks = true;
33
React = require('react');
34
ReactNoop = require('react-noop-renderer');
35
useState = React.useState;
packages/react-reconciler/src/__tests__/ReactNewContext-test.internal.js
+1
@@ -21,6 +21,7 @@ describe('ReactNewContext', () => {
21
jest.resetModules();
22
ReactFeatureFlags = require('shared/ReactFeatureFlags');
23
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
24
+ ReactFeatureFlags.enableHooks = true;
25
React = require('react');
26
useContext = React.useContext;
27
ReactNoop = require('react-noop-renderer');
packages/react/src/React.js
+12
-9
@@ -13,6 +13,7 @@ import {
13
REACT_STRICT_MODE_TYPE,
14
REACT_SUSPENSE_TYPE,
15
} from 'shared/ReactSymbols';
16
+import {enableHooks} from 'shared/ReactFeatureFlags';
17
18
import {Component, PureComponent} from './ReactBaseClasses';
19
import {createRef} from './ReactCreateRef';
@@ -63,15 +64,6 @@ const React = {
64
lazy,
65
memo,
66
66
- useContext,
67
- useState,
68
- useReducer,
69
- useRef,
70
- useEffect,
71
- useCallback,
72
- useMemo,
73
- useAPI,
74
-
67
Fragment: REACT_FRAGMENT_TYPE,
68
StrictMode: REACT_STRICT_MODE_TYPE,
69
Suspense: REACT_SUSPENSE_TYPE,
@@ -94,4 +86,15 @@ if (enableStableConcurrentModeAPIs) {
86
React.unstable_Profiler = REACT_PROFILER_TYPE;
87
}
88
89
+if (enableHooks) {
90
+ React.useContext = useContext;
91
+ React.useState = useState;
92
+ React.useReducer = useReducer;
93
+ React.useRef = useRef;
94
+ React.useEffect = useEffect;
95
+ React.useCallback = useCallback;
96
+ React.useMemo = useMemo;
97
+ React.useAPI = useAPI;
98
+}
99
+
100
export default React;
packages/shared/ReactFeatureFlags.js
+1
@@ -9,6 +9,7 @@
9
10
export const enableUserTimingAPI = __DEV__;
11
12
+export const enableHooks = false;
13
// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:
14
export const debugRenderPhaseSideEffects = false;
15
packages/shared/forks/ReactFeatureFlags.native-fabric-fb.js
+1
@@ -15,6 +15,7 @@ import typeof * as FabricFeatureFlagsType from './ReactFeatureFlags.native-fabri
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
export const enableUserTimingAPI = __DEV__;
18
+export const enableHooks = false;
19
export const warnAboutDeprecatedLifecycles = false;
20
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
21
export const enableProfilerTimer = __PROFILE__;
packages/shared/forks/ReactFeatureFlags.native-fabric-oss.js
+1
@@ -15,6 +15,7 @@ import typeof * as FabricFeatureFlagsType from './ReactFeatureFlags.native-fabri
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
export const enableUserTimingAPI = __DEV__;
18
+export const enableHooks = false;
19
export const warnAboutDeprecatedLifecycles = false;
20
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
21
export const enableProfilerTimer = __PROFILE__;
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1
@@ -14,6 +14,7 @@ import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.native-fb';
14
15
// Re-export dynamic flags from the fbsource version.
16
export const {
17
+ enableHooks,
18
debugRenderPhaseSideEffects,
19
debugRenderPhaseSideEffectsForStrictMode,
20
warnAboutDeprecatedLifecycles,
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1
@@ -14,6 +14,7 @@ import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.native-oss';
14
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
+export const enableHooks = false;
18
export const enableUserTimingAPI = __DEV__;
19
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
20
export const warnAboutDeprecatedLifecycles = false;
packages/shared/forks/ReactFeatureFlags.persistent.js
+1
@@ -15,6 +15,7 @@ import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persiste
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
export const enableUserTimingAPI = __DEV__;
18
+export const enableHooks = false;
19
export const warnAboutDeprecatedLifecycles = false;
20
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
21
export const enableProfilerTimer = __PROFILE__;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -15,6 +15,7 @@ import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persiste
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
export const enableUserTimingAPI = __DEV__;
18
+export const enableHooks = false;
19
export const warnAboutDeprecatedLifecycles = false;
20
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
21
export const enableProfilerTimer = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
@@ -15,6 +15,7 @@ import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persiste
15
export const debugRenderPhaseSideEffects = false;
16
export const debugRenderPhaseSideEffectsForStrictMode = false;
17
export const enableUserTimingAPI = __DEV__;
18
+export const enableHooks = false;
19
export const warnAboutDeprecatedLifecycles = false;
20
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
21
export const enableProfilerTimer = false;
packages/shared/forks/ReactFeatureFlags.www.js
+3
@@ -20,6 +20,9 @@ export const {
20
disableInputAttributeSyncing,
21
} = require('ReactFeatureFlags');
22
23
+// The rest of the flags are static for better dead code elimination.
24
+export const enableHooks = false;
25
+
26
// In www, we have experimental support for gathering data
27
// from User Timing API calls in production. By default, we
28
// only emit performance.mark/measure calls in __DEV__. But if