From 1e35f2b282a20b41000e6b048fa5a16e147d930b Mon Sep 17 00:00:00 2001 From: Clement Hoang Date: Thu, 2 Nov 2017 15:21:06 -0700 Subject: [PATCH] Put createRoot export under a feature flag (#11426) --- .../src/ReactNativeCSFeatureFlags.js | 1 + .../src/__tests__/ReactDOMRoot-test.js | 1 + packages/react-dom/src/client/ReactDOM.js | 17 +++++++++++------ packages/shared/ReactFeatureFlags.js | 3 +++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/react-cs-renderer/src/ReactNativeCSFeatureFlags.js b/packages/react-cs-renderer/src/ReactNativeCSFeatureFlags.js index b419fe6b0b..2e76886194 100644 --- a/packages/react-cs-renderer/src/ReactNativeCSFeatureFlags.js +++ b/packages/react-cs-renderer/src/ReactNativeCSFeatureFlags.js @@ -13,6 +13,7 @@ var ReactNativeCSFeatureFlags: FeatureFlags = { enableAsyncSubtreeAPI: true, enableAsyncSchedulingByDefaultInReactDOM: false, enableReactFragment: false, + enableCreateRoot: false, // React Native CS uses persistent reconciler. enableMutatingReconciler: false, enableNoopReconciler: false, diff --git a/packages/react-dom/src/__tests__/ReactDOMRoot-test.js b/packages/react-dom/src/__tests__/ReactDOMRoot-test.js index c4a327b116..7135445196 100644 --- a/packages/react-dom/src/__tests__/ReactDOMRoot-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMRoot-test.js @@ -9,6 +9,7 @@ 'use strict'; +require('shared/ReactFeatureFlags').enableCreateRoot = true; var React = require('react'); var ReactDOM = require('react-dom'); var ReactDOMServer = require('react-dom/server'); diff --git a/packages/react-dom/src/client/ReactDOM.js b/packages/react-dom/src/client/ReactDOM.js index aced891efa..0c113073d6 100644 --- a/packages/react-dom/src/client/ReactDOM.js +++ b/packages/react-dom/src/client/ReactDOM.js @@ -787,12 +787,7 @@ ReactRoot.prototype.unmount = function(callback) { DOMRenderer.updateContainer(null, root, null, callback); }; -var ReactDOM = { - createRoot(container: DOMContainer, options?: RootOptions): ReactRootNode { - const hydrate = options != null && options.hydrate === true; - return new ReactRoot(container, hydrate); - }, - +var ReactDOM: Object = { createPortal, findDOMNode( @@ -952,6 +947,16 @@ var ReactDOM = { }, }; +if (ReactFeatureFlags.enableCreateRoot) { + ReactDOM.createRoot = function createRoot( + container: DOMContainer, + options?: RootOptions, + ): ReactRootNode { + const hydrate = options != null && options.hydrate === true; + return new ReactRoot(container, hydrate); + }; +} + const foundDevTools = injectInternals({ findFiberByHostInstance: ReactDOMComponentTree.getClosestInstanceFromNode, findHostInstanceByFiber: DOMRenderer.findHostInstance, diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 8d71dd0a87..b9f2d2a952 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -14,6 +14,7 @@ export type FeatureFlags = {| enableNoopReconciler: boolean, enablePersistentReconciler: boolean, enableReactFragment: boolean, + enableCreateRoot: boolean, |}; var ReactFeatureFlags: FeatureFlags = { @@ -27,6 +28,8 @@ var ReactFeatureFlags: FeatureFlags = { enablePersistentReconciler: false, // Exports React.Fragment enableReactFragment: false, + // Exports ReactDOM.createRoot + enableCreateRoot: false, }; if (__DEV__) {