diff --git a/packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js index 6c6ab722cf468..e0ec5e9674309 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js @@ -85,7 +85,7 @@ describe('ReactDOMServerPartialHydration', () => { ReactDOMServer = require('react-dom/server'); Scheduler = require('scheduler'); Suspense = React.Suspense; - SuspenseList = React.unstable_SuspenseList; + SuspenseList = React.SuspenseList; useHover = require('react-interactions/events/hover').useHover; }); diff --git a/packages/react-dom/src/__tests__/ReactDOMServerSuspense-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMServerSuspense-test.internal.js index 3d863169ccd3c..48a5857ed2a40 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerSuspense-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerSuspense-test.internal.js @@ -107,14 +107,14 @@ describe('ReactDOMServerSuspense', () => { it('server renders a SuspenseList component and its children', async () => { const example = ( - +
A
B
-
+ ); const element = await serverRender(example); const parent = element.parentNode; diff --git a/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js b/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js index 4ff9533ed7301..ee613d8e6cd78 100644 --- a/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js +++ b/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js @@ -724,7 +724,7 @@ function runActTests(label, render, unmount, rerender) { }); describe('suspense', () => { - if (__DEV__) { + if (__DEV__ && __EXPERIMENTAL__) { it('triggers fallbacks if available', async () => { let resolved = false; let resolve; diff --git a/packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js index f41e7a5073eed..c2c9b333abaaf 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js @@ -6,6 +6,11 @@ let Suspense; let SuspenseList; describe('ReactSuspenseList', () => { + if (!__EXPERIMENTAL__) { + it("empty test so Jest doesn't complain", () => {}); + return; + } + beforeEach(() => { jest.resetModules(); ReactFeatureFlags = require('shared/ReactFeatureFlags'); @@ -16,7 +21,7 @@ describe('ReactSuspenseList', () => { ReactNoop = require('react-noop-renderer'); Scheduler = require('scheduler'); Suspense = React.Suspense; - SuspenseList = React.unstable_SuspenseList; + SuspenseList = React.SuspenseList; }); function Text(props) { diff --git a/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js index 5a78700860e6c..15c7b9e5f19a3 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js @@ -10,6 +10,11 @@ let TextResource; let textResourceShouldFail; describe('ReactSuspenseWithNoopRenderer', () => { + if (!__EXPERIMENTAL__) { + it("empty test so Jest doesn't complain", () => {}); + return; + } + beforeEach(() => { jest.resetModules(); ReactFeatureFlags = require('shared/ReactFeatureFlags'); diff --git a/packages/react/index.fb.js b/packages/react/index.fb.js new file mode 100644 index 0000000000000..2c1a4ec79b78d --- /dev/null +++ b/packages/react/index.fb.js @@ -0,0 +1,14 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +const ReactFB = require('./src/ReactFB'); + +// TODO: decide on the top-level export form. +// This is hacky but makes it work with both Rollup and Jest. +module.exports = ReactFB.default || ReactFB; diff --git a/packages/react/src/React.js b/packages/react/src/React.js index bfae007942bdc..5b4d0ace30a16 100644 --- a/packages/react/src/React.js +++ b/packages/react/src/React.js @@ -96,7 +96,6 @@ const React = { Profiler: REACT_PROFILER_TYPE, StrictMode: REACT_STRICT_MODE_TYPE, Suspense: REACT_SUSPENSE_TYPE, - unstable_SuspenseList: REACT_SUSPENSE_LIST_TYPE, createElement: __DEV__ ? createElementWithValidation : createElement, cloneElement: __DEV__ ? cloneElementWithValidation : cloneElement, @@ -105,14 +104,14 @@ const React = { version: ReactVersion, - unstable_withSuspenseConfig: withSuspenseConfig, - __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals, }; if (exposeConcurrentModeAPIs) { React.useTransition = useTransition; React.useDeferredValue = useDeferredValue; + React.SuspenseList = REACT_SUSPENSE_LIST_TYPE; + React.unstable_withSuspenseConfig = withSuspenseConfig; } if (enableFlareAPI) { diff --git a/packages/react/src/ReactFB.js b/packages/react/src/ReactFB.js new file mode 100644 index 0000000000000..9c4f974010259 --- /dev/null +++ b/packages/react/src/ReactFB.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +import React from './React'; + +// TODO: Temporary alias until we update the callers downstream. +React.unstable_SuspenseList = React.SuspenseList; + +export default React; diff --git a/packages/react/src/__tests__/ReactDOMTracing-test.internal.js b/packages/react/src/__tests__/ReactDOMTracing-test.internal.js index e2bf25b8cf175..b2684352a6154 100644 --- a/packages/react/src/__tests__/ReactDOMTracing-test.internal.js +++ b/packages/react/src/__tests__/ReactDOMTracing-test.internal.js @@ -523,7 +523,7 @@ describe('ReactDOMTracing', () => { }); it('should properly trace interactions through a multi-pass SuspenseList render', () => { - const SuspenseList = React.unstable_SuspenseList; + const SuspenseList = React.SuspenseList; const Suspense = React.Suspense; function Text({text}) { Scheduler.unstable_yieldValue(text);