diff --git a/packages/react-client/src/ReactFlightClient.js b/packages/react-client/src/ReactFlightClient.js index 4a13d094a82..fe88fe0357b 100644 --- a/packages/react-client/src/ReactFlightClient.js +++ b/packages/react-client/src/ReactFlightClient.js @@ -879,7 +879,7 @@ function initializeDebugChunk( waitForReference( debugChunk, {}, // noop, since we'll have already added an entry to debug info - '', // noop + 'debug', // noop, but we need it to not be empty string since that indicates the root object response, initializeDebugInfo, [''], // path diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js index 54177d8f8cb..42cff2ad51d 100644 --- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js +++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMEdge-test.js @@ -1915,4 +1915,57 @@ describe('ReactFlightDOMEdge', () => { expect(ownerStack).toBeNull(); } }); + + it('can pass an async import that resolves later as a prop to a null component', async () => { + let resolveClientComponentChunk; + const client = clientExports( + { + foo: 'bar', + }, + '42', + '/test.js', + new Promise(resolve => (resolveClientComponentChunk = resolve)), + ); + + function ServerComponent(props) { + return null; + } + + function App() { + return ( +
+ +
+ ); + } + + const stream = await serverAct(() => + passThrough( + ReactServerDOMServer.renderToReadableStream(, webpackMap), + ), + ); + + // Parsing the root blocks because the module hasn't loaded yet + const response = ReactServerDOMClient.createFromReadableStream(stream, { + serverConsumerManifest: { + moduleMap: null, + moduleLoading: null, + }, + }); + + function ClientRoot() { + return use(response); + } + + // Initialize to be blocked. + response.then(() => {}); + // Unblock. + resolveClientComponentChunk(); + + const ssrStream = await serverAct(() => + ReactDOMServer.renderToReadableStream(), + ); + const result = await readResult(ssrStream); + expect(result).toEqual('
'); + }); });