Prevent deopts from modifying exports object in stable builds (#14309)

This commit is contained in:
Dan Abramov 2018-11-23 14:10:57 +00:00 committed by GitHub
parent 0c7189d923
commit 7475120ce7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 5 deletions

View File

@ -770,6 +770,7 @@ const ReactDOM: Object = {
flushSync: flushSync, flushSync: flushSync,
unstable_createRoot: createRoot,
unstable_flushControlled: flushControlled, unstable_flushControlled: flushControlled,
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
@ -810,8 +811,7 @@ function createRoot(container: DOMContainer, options?: RootOptions): ReactRoot {
if (enableStableConcurrentModeAPIs) { if (enableStableConcurrentModeAPIs) {
ReactDOM.createRoot = createRoot; ReactDOM.createRoot = createRoot;
} else { ReactDOM.unstable_createRoot = undefined;
ReactDOM.unstable_createRoot = createRoot;
} }
const foundDevTools = injectIntoDevTools({ const foundDevTools = injectIntoDevTools({

View File

@ -77,15 +77,22 @@ const React = {
version: ReactVersion, version: ReactVersion,
unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,
unstable_Profiler: REACT_PROFILER_TYPE,
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals,
}; };
// Note: some APIs are added with feature flags.
// Make sure that stable builds for open source
// don't modify the React object to avoid deopts.
// Also let's not expose their names in stable builds.
if (enableStableConcurrentModeAPIs) { if (enableStableConcurrentModeAPIs) {
React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
React.Profiler = REACT_PROFILER_TYPE; React.Profiler = REACT_PROFILER_TYPE;
} else { React.unstable_ConcurrentMode = undefined;
React.unstable_ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; React.unstable_Profiler = undefined;
React.unstable_Profiler = REACT_PROFILER_TYPE;
} }
if (enableHooks) { if (enableHooks) {