resume
resume streams a pre-rendered React tree to a Readable Web Stream.
const stream = await resume(reactNode, postponedState, options?)
Reference
resume(node, postponedState, options?)
Call resume to resume rendering a pre-rendered React tree as HTML into a Readable Web Stream.
import { resume } from 'react-dom/server'; import {getPostponedState} from './storage'; async function handler(request, writable) { const postponed = await getPostponedState(request); const resumeStream = await resume(<App />, postponed); return resumeStream.pipeTo(writable) }
Parameters
reactNode: The React node you calledprerenderwith. For example, a JSX element like<App />. It is expected to represent the entire document, so theAppcomponent should render the<html>tag.postponedState: The opaquepostponeobject returned from a prerender API, loaded from wherever you stored it (e.g. redis, a file, or S3).- optional
options: An object with streaming options.- optional
nonce: Anoncestring to allow scripts forscript-srcContent-Security-Policy. - optional
signal: An abort signal that lets you abort server rendering and render the rest on the client. - optional
onError: A callback that fires whenever there is a server error, whether recoverable or not. By default, this only callsconsole.error. If you override it to log crash reports, make sure that you still callconsole.error.
- optional
Returns
resume returns a Promise:
- If
resumesuccessfully produced a shell, that Promise will resolve to a Readable Web Stream. that can be piped to a Writable Web Stream.. - If an error happens in the shell, the Promise will reject with that error.
The returned stream has an additional property:
allReady: A Promise that resolves when all rendering is complete. You canawait stream.allReadybefore returning a response for crawlers and static generation. If you do that, you won’t get any progressive loading. The stream will contain the final HTML.
Caveats
resumedoes not accept options forbootstrapScripts,bootstrapScriptContent, orbootstrapModules. Instead, you need to pass these options to theprerendercall that generates thepostponedState. You can also inject bootstrap content into the writable stream manually.resumedoes not acceptidentifierPrefixsince the prefix needs to be the same in bothprerenderandresume.- Since
noncecannot be provided to prerender, you should only providenoncetoresumeif you’re not providing scripts to prerender. resumere-renders from the root until it finds a component that was not fully pre-rendered. Only fully prerendered Components (the Component and its children finished prerendering) are skipped entirely.
Usage
Resuming a prerender
Further reading
Resuming behaves like renderToReadableStream. For more examples, check out the usage section of renderToReadableStream.
The usage section of prerender includes examples of how to use prerender specifically.