diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationStrictMode-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationModes-test.js
similarity index 56%
rename from packages/react-dom/src/__tests__/ReactDOMServerIntegrationStrictMode-test.js
rename to packages/react-dom/src/__tests__/ReactDOMServerIntegrationModes-test.js
index b34dd4a8e3..ca941a388f 100644
--- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationStrictMode-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationModes-test.js
@@ -103,4 +103,72 @@ describe('ReactDOMServerIntegration', () => {
expect(await render()).toBe(null);
});
});
+
+ describe('React.unstable_AsyncMode', () => {
+ itRenders('an async mode with one child', async render => {
+ let e = await render(
+
+ text1
+ ,
+ );
+ let parent = e.parentNode;
+ expect(parent.childNodes[0].tagName).toBe('DIV');
+ });
+
+ itRenders('an async mode with several children', async render => {
+ let Header = props => {
+ return
header
;
+ };
+ let Footer = props => {
+ return (
+
+ footer
+ about
+
+ );
+ };
+ let e = await render(
+
+ text1
+ text2
+
+
+ ,
+ );
+ let parent = e.parentNode;
+ expect(parent.childNodes[0].tagName).toBe('DIV');
+ expect(parent.childNodes[1].tagName).toBe('SPAN');
+ expect(parent.childNodes[2].tagName).toBe('P');
+ expect(parent.childNodes[3].tagName).toBe('H2');
+ expect(parent.childNodes[4].tagName).toBe('H3');
+ });
+
+ itRenders('a nested async mode', async render => {
+ let e = await render(
+
+
+ text1
+
+ text2
+
+
+
+ {null}
+
+
+ {false}
+
+
+ ,
+ );
+ let parent = e.parentNode;
+ expect(parent.childNodes[0].tagName).toBe('DIV');
+ expect(parent.childNodes[1].tagName).toBe('SPAN');
+ expect(parent.childNodes[2].tagName).toBe('P');
+ });
+
+ itRenders('an empty async mode', async render => {
+ expect(await render()).toBe(null);
+ });
+ });
});
diff --git a/packages/react-dom/src/server/ReactPartialRenderer.js b/packages/react-dom/src/server/ReactPartialRenderer.js
index 5d28988152..01dcbf079e 100644
--- a/packages/react-dom/src/server/ReactPartialRenderer.js
+++ b/packages/react-dom/src/server/ReactPartialRenderer.js
@@ -29,6 +29,7 @@ import {warnAboutDeprecatedLifecycles} from 'shared/ReactFeatureFlags';
import {
REACT_FRAGMENT_TYPE,
REACT_STRICT_MODE_TYPE,
+ REACT_ASYNC_MODE_TYPE,
REACT_CALL_TYPE,
REACT_RETURN_TYPE,
REACT_PORTAL_TYPE,
@@ -816,6 +817,7 @@ class ReactDOMServerRenderer {
switch (elementType) {
case REACT_STRICT_MODE_TYPE:
+ case REACT_ASYNC_MODE_TYPE:
case REACT_FRAGMENT_TYPE: {
const nextChildren = toArray(
((nextChild: any): ReactElement).props.children,