resumeAndPrerender 使用 Web Stream 将预渲染的 React 树转化为静态 HTML 字符串。
const { prelude,postpone } = await resumeAndPrerender(reactNode, postponedState, options?)参考
🌐 Reference
resumeAndPrerender(reactNode, postponedState, options?)
调用 resumeAndPrerender 将预渲染的 React 树继续转换为静态 HTML 字符串。
🌐 Call resumeAndPrerender to continue a prerendered React tree to a static HTML string.
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 具有交互性。
🌐 On the client, call hydrateRoot to make the server-generated HTML interactive.
参数
🌐 Parameters
reactNode:你调用的 React 节点prerender(或之前的resumeAndPrerender)。例如,一个 JSX 元素如<App />。它预计表示整个文档,所以App组件应该渲染<html>标签。postponedState:从 prerender API 返回的不可见postpone对象,从你存储它的地方加载(例如 redis、文件或 S3)。- 可选
options:一个带有流选项的对象。
返回
🌐 Returns
prerender 返回一个 Promise:
- 如果渲染成功,则 Promise 将解析为包含以下内容的对象:
prelude:一个 HTML 的 Web 流。你可以使用这个流分块发送响应,或者将整个流读取到一个字符串中。postponed:一个可以被 JSON 序列化的、不透明的对象,如果prerender被中止,可以传递给resume或resumeAndPrerender。
- 如果渲染失败,Promise 将被拒绝。使用此方法输出备用 shell。
注意事项
🌐 Caveats
nonce 在预渲染时不可用。每个请求的随机数(nonce)必须是唯一的,如果你使用随机数来通过 CSP 保护你的应用,那么在预渲染中包含随机数值将是不合适且不安全的。
用法
🌐 Usage
延伸阅读
🌐 Further reading
resumeAndPrerender 的行为类似于 prerender,但可以用于继续之前被中止的预渲染过程。有关恢复预渲染树的更多信息,请参阅 恢复文档。