什么是「同构(Isomorphic / Universal)」渲染?
同构指同一份代码/组件既能在服务端渲染、又能在客户端运行,避免为两端各写一套。
服务端:renderToString(<App/>) -> 生成 HTML 字符串
客户端:hydrateRoot(<App/>) -> 复用 HTML 并注水
两者共用 <App/> 组件与大部分逻辑好处:首屏 SSR(快、SEO 好)+ 客户端交互(SPA 体验),代码只写一份。
注意点(服务端特有坑):
- 服务端没有
window/document/localStorage,访问会报错 → 用typeof window !== 'undefined'守卫,或放到useEffect/onMounted等客户端生命周期 - 服务端代码会常驻共享,避免用模块级可变全局状态(会被并发请求串数据)