SSR 中如何把服务端数据「注水」到客户端,避免重复请求?

服务端取到的数据要序列化进 HTML,客户端注水时直接复用,避免再请求一次(防瀑布流/闪烁)。

// 服务端:把数据挂到 window 上
const data = await fetchData()
const html = `<div id="root">${renderToString(<App data={data}/>)}</div>
<script>window.__INITIAL_STATE__ = ${JSON.stringify(safeData)}</script>`
// 客户端:直接读,不再请求
const data = window.__INITIAL_STATE__
hydrateRoot(document.getElementById('root'), <App data={data}/>)

注意安全:

同分类其他题目