Enable stable concurrent APIs flag for 16.7 alpha (#13928)
* Add enableStableConcurrentModeAPIs feature flag * Conditionally name concurrent API based on enableStableConcurrentModeAPIs flag
Brian Vaughn committed
Oct 24, 2018 at 13:45 UTC
275e76e83bc2be5dc0be9185ff747f383969289a
11 files changed
+31
-7
packages/react-dom/src/client/ReactDOM.js
+9
-5
@@ -34,6 +34,7 @@ import getComponentName from 'shared/getComponentName';
34
import invariant from 'shared/invariant';
35
import lowPriorityWarning from 'shared/lowPriorityWarning';
36
import warningWithoutStack from 'shared/warningWithoutStack';
37
+import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
38
39
import * as ReactDOMComponentTree from './ReactDOMComponentTree';
40
import {restoreControlledState} from './ReactDOMComponent';
@@ -770,17 +771,20 @@ type RootOptions = {
771
hydrate?: boolean,
772
};
773
773
-ReactDOM.unstable_createRoot = function createRoot(
774
- container: DOMContainer,
775
- options?: RootOptions,
776
-): ReactRoot {
774
+function createRoot(container: DOMContainer, options?: RootOptions): ReactRoot {
775
invariant(
776
isValidContainer(container),
777
'unstable_createRoot(...): Target container is not a DOM element.',
778
);
779
const hydrate = options != null && options.hydrate === true;
780
return new ReactRoot(container, true, hydrate);
783
-};
781
+}
782
+
783
+if (enableStableConcurrentModeAPIs) {
784
+ ReactDOM.createRoot = createRoot;
785
+} else {
786
+ ReactDOM.unstable_createRoot = createRoot;
787
+}
788
789
const foundDevTools = DOMRenderer.injectIntoDevTools({
790
findFiberByHostInstance: ReactDOMComponentTree.getClosestInstanceFromNode,
packages/react/src/React.js
+9
-2
@@ -33,6 +33,7 @@ import {
33
cloneElementWithValidation,
34
} from './ReactElementValidator';
35
import ReactSharedInternals from './ReactSharedInternals';
36
+import {enableStableConcurrentModeAPIs} from 'shared/ReactFeatureFlags';
37
38
const React = {
39
Children: {
@@ -54,9 +55,7 @@ const React = {
55
56
Fragment: REACT_FRAGMENT_TYPE,
57
StrictMode: REACT_STRICT_MODE_TYPE,
57
- unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,
58
Suspense: REACT_SUSPENSE_TYPE,
59
- unstable_Profiler: REACT_PROFILER_TYPE,
59
60
createElement: __DEV__ ? createElementWithValidation : createElement,
61
cloneElement: __DEV__ ? cloneElementWithValidation : cloneElement,
@@ -68,4 +67,12 @@ const React = {
67
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals,
68
};
69
70
+if (enableStableConcurrentModeAPIs) {
71
+ React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
72
+ React.Profiler = REACT_PROFILER_TYPE;
73
+} else {
74
+ React.unstable_ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
75
+ React.unstable_Profiler = REACT_PROFILER_TYPE;
76
+}
77
+
78
export default React;
packages/shared/ReactFeatureFlags.js
+4
@@ -42,3 +42,7 @@ export function addUserTimingListener() {
42
// React Fire: prevent the value and checked attributes from syncing
43
// with their related DOM properties
44
export const disableInputAttributeSyncing = false;
45
+
46
+// These APIs will no longer be "unstable" in the upcoming 16.7 release,
47
+// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.
48
+export const enableStableConcurrentModeAPIs = false;
packages/shared/forks/ReactFeatureFlags.native-fabric-fb.js
+1
@@ -21,6 +21,7 @@ export const enableProfilerTimer = __PROFILE__;
21
export const enableSchedulerTracing = __PROFILE__;
22
export const enableSuspenseServerRenderer = false;
23
export const disableInputAttributeSyncing = false;
24
+export const enableStableConcurrentModeAPIs = false;
25
26
// Only used in www builds.
27
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.native-fabric-oss.js
+1
@@ -21,6 +21,7 @@ export const enableProfilerTimer = __PROFILE__;
21
export const enableSchedulerTracing = __PROFILE__;
22
export const enableSuspenseServerRenderer = false;
23
export const disableInputAttributeSyncing = false;
24
+export const enableStableConcurrentModeAPIs = false;
25
26
// Only used in www builds.
27
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1
@@ -26,6 +26,7 @@ export const enableUserTimingAPI = __DEV__;
26
export const enableProfilerTimer = __PROFILE__;
27
export const enableSchedulerTracing = __PROFILE__;
28
export const enableSuspenseServerRenderer = false;
29
+export const enableStableConcurrentModeAPIs = false;
30
31
// Only used in www builds.
32
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1
@@ -21,6 +21,7 @@ export const enableProfilerTimer = __PROFILE__;
21
export const enableSchedulerTracing = __PROFILE__;
22
export const enableSuspenseServerRenderer = false;
23
export const disableInputAttributeSyncing = false;
24
+export const enableStableConcurrentModeAPIs = false;
25
26
// Only used in www builds.
27
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.persistent.js
+1
@@ -21,6 +21,7 @@ export const enableProfilerTimer = __PROFILE__;
21
export const enableSchedulerTracing = __PROFILE__;
22
export const enableSuspenseServerRenderer = false;
23
export const disableInputAttributeSyncing = false;
24
+export const enableStableConcurrentModeAPIs = false;
25
26
// Only used in www builds.
27
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -21,6 +21,7 @@ export const enableProfilerTimer = false;
21
export const enableSchedulerTracing = false;
22
export const enableSuspenseServerRenderer = false;
23
export const disableInputAttributeSyncing = false;
24
+export const enableStableConcurrentModeAPIs = false;
25
26
// Only used in www builds.
27
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
@@ -20,6 +20,7 @@ export const replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
20
export const enableProfilerTimer = false;
21
export const enableSchedulerTracing = false;
22
export const enableSuspenseServerRenderer = false;
23
+export const enableStableConcurrentModeAPIs = false;
24
25
// Only used in www builds.
26
export function addUserTimingListener() {
packages/shared/forks/ReactFeatureFlags.www.js
+2
@@ -31,6 +31,8 @@ export let enableUserTimingAPI = __DEV__;
31
export const enableProfilerTimer = __PROFILE__;
32
export const enableSchedulerTracing = __PROFILE__;
33
34
+export const enableStableConcurrentModeAPIs = false;
35
+
36
let refCount = 0;
37
export function addUserTimingListener() {
38
if (__DEV__) {