用途:在 SSR/React 应用中排查与修复水合(hydration)不匹配错误,保证服务端输出与客户端首渲染一致。适用于调试水合报错、文本内容不一致、浏览器扩展污染 DOM、实现确定性数据桥接、优化 SSR/客户端水合性能,以及用 onRecoverableError 建立错误监控。不适用于无 SSR 的纯客户端 React 应用、无客户端水合的静态站点或纯 API 后端。
主要能力与模式:选择性水合使用 <Suspense fallback={...}> 边界,独立水合并优先响应用户交互;确定性桥接用 use(serverPromise) 替代 useEffect,在 React 19 中实现服务端到客户端的直接数据过渡;缓存指令在数据获取器中加 'use cache',让客户端水合时共享服务端结果;两遍渲染用 useState + useEffect 处理仅客户端内容,首渲染匹配服务端、次渲染再补充;仅客户端组件可用 next/dynamic 配合 ssr: false 完全排除服务端渲染;错误监控在 hydrateRoot 上配置 onRecoverableError,捕获并上报静默水合恢复;React 19 单 diff 错误格式可精确定位不匹配位置;onUncaughtError、onCaughtError 提供细粒度错误处理;日期时间需 UTC 归一化或服务端同步上下文;需在启用常见浏览器扩展的情况下测试,识别翻译、深色模式等工具造成的 DOM 污染。
常见错误与修正:文本内容不匹配多因非确定性渲染,改用两遍渲染或 suppressHydrationWarning;服务端 HTML 预期不符说明客户端渲染了服务端没有的内容,把仅客户端代码移入 useEffect 或动态导入;水合失败常由非法 HTML 嵌套(如 <p> 内嵌 <p>)引起,需修正结构;服务端多出属性需保证属性一致;水合过程报错可能来自扩展修改 DOM,检查扩展并验证 HTML 合法性。不要在容器元素上滥用 suppressHydrationWarning,应只在无法避免差异的叶子元素上使用;不要在渲染体中访问 window 或 document,也不要使用无稳定种子的 Math.random() 或 new Date();生产环境应配置 onRecoverableError 记录静默恢复。
使用方式:可借助 Explore 代理配合 Chrome DevTools 运行水合审计脚本扫描隐藏警告;用 Task 代理隔离、修复并验证各受影响组件;用 Plan 代理在新功能中于 Suspense 边界、两遍渲染和缓存模式之间选型。具体安装命令、脚本代码与更详细配置在提供的资料中暂未给出。