resumeAndPrerender 使用 Web Stream 将预渲染的 React 树继续渲染为静态 HTML 字符串。
const { prelude,postpone } = await resumeAndPrerender(reactNode, postponedState, options?)参考
resumeAndPrerender(reactNode, postponedState, options?)
调用 resumeAndPrerender 可将预渲染的 React 树继续渲染为静态 HTML 字符串。
import { resumeAndPrerender } from 'react-dom/static';
import { getPostponedState } from 'storage';
async function handler(request, response) {
const postponedState = getPostponedState(request);
const { prelude } = await resumeAndPrerender(<App />, postponedState, {
bootstrapScripts: ['/main.js']
});
return new Response(prelude, {
headers: { 'content-type': 'text/html' },
});
}在客户端,调用 hydrateRoot 让服务器生成的 HTML 变得可交互。
参数
reactNode:你调用prerender(或之前的resumeAndPrerender)时传入的 React 节点。例如,一个像<App />这样的 JSX 元素。它应表示整个文档,因此App组件应该渲染<html>标签。postponedState:由 prerender API 返回的、不透明的postpone对象,从你保存它的任意位置加载而来(例如 redis、文件或 S3)。- 可选
options:一个包含流式选项的对象。- 可选
signal:一个 abort signal,可让你 中止服务器渲染 并在客户端渲染剩余部分。 - 可选
onError:每当发生服务器错误时触发的回调,无论错误是 可恢复的 还是 不可恢复的。 默认情况下,它只会调用console.error。如果你重写它来 记录崩溃报告, 请确保你仍然调用console.error。
- 可选
返回值
prerender 返回一个 Promise:
- 如果渲染成功,Promise 将解析为一个包含以下内容的对象:
prelude:HTML 的 Web Stream。你可以使用这个流分块发送响应,也可以将整个流读取为字符串。postponed:一个可 JSON 序列化的、不透明对象;如果prerender被中止,它可以传递给resume或resumeAndPrerender。
- 如果渲染失败,Promise 将被拒绝。可用它来输出一个回退壳层。
注意事项
在预渲染时,nonce 不是可用选项。nonce 必须在每次请求中唯一,如果你使用 nonce 通过 CSP 保护应用,那么在预渲染结果中包含 nonce 值是不合适且不安全的。
用法
延伸阅读
resumeAndPrerender 的行为与 prerender 类似,但它可用于继续之前已开始、但被中止的预渲染流程。
有关恢复预渲染树的更多信息,请参阅 resume 文档。