- 修复DashboardLayout中的退出登录函数,确保清除所有认证信息 - 恢复_app.tsx中的认证逻辑,确保仪表盘页面需要登录访问 - 完善退出登录流程:清除本地存储 -> 调用登出API -> 重定向到登录页面 - 添加错误边界组件提升用户体验 - 优化React水合错误处理 - 添加JWT令牌验证API - 完善各个仪表盘页面的功能和样式
2.8 KiB
2.8 KiB
水合错误修复指南
问题描述
应用出现 React 水合错误(Hydration Error),导致整个根节点切换到客户端渲染。
修复措施
1. 客户端挂载检测
- 创建了
useClientMount
hook 来检测组件是否在客户端已挂载 - 在客户端挂载之前显示简化的加载状态,避免服务器端和客户端渲染不一致
2. 错误边界组件
- 创建了
ErrorBoundary
组件来捕获和处理 React 错误 - 提供友好的错误界面和恢复选项
- 特别处理水合错误的显示和调试
3. 调试工具
- 创建了
hydrationDebug
工具来帮助诊断水合错误 - 提供安全的浏览器 API 访问方法
- 自动检查环境变量一致性
4. Next.js 配置优化
- 暂时禁用 React 严格模式以减少开发环境的水合警告
- 添加实验性配置来优化页面加载
- 配置编译器选项
5. 代码修改
pages/_app.tsx
- 添加客户端挂载检测
- 使用
suppressHydrationWarning
属性 - 包装错误边界组件
components/Layout.tsx
- 添加客户端挂载检测
- 在客户端挂载前返回简化布局
utils/useClientMount.ts
- 检测组件是否在客户端已挂载的 hook
utils/hydrationDebug.ts
- 开发环境的水合错误调试工具
components/ErrorBoundary.tsx
- React 错误边界组件,特别处理水合错误
使用建议
1. 开发环境
- 打开浏览器控制台查看详细的调试信息
- 使用
hydrationDebug
工具提供的安全方法访问浏览器 API
2. 生产环境
- 错误边界会提供友好的错误界面
- 用户可以通过刷新页面或返回上一页来恢复
3. 常见水合错误原因
- 服务器端和客户端渲染不同内容
- 在 useEffect 中运行服务器端代码
- 日期/时间差异
- 随机值
- 浏览器特定 API
- localStorage/sessionStorage 访问
- Window 对象访问
最佳实践
1. 避免水合错误
- 使用
useClientMount
hook 检测客户端挂载 - 避免在初始渲染时访问浏览器 API
- 使用
suppressHydrationWarning
属性(谨慎使用)
2. 错误处理
- 始终包装错误边界组件
- 提供友好的错误恢复选项
- 在开发环境中记录详细的错误信息
3. 性能优化
- 使用
useIsomorphicLayoutEffect
处理服务器端渲染 - 优化初始加载状态
- 避免不必要的重新渲染
测试步骤
- 刷新页面确认水合错误是否消失
- 检查浏览器控制台是否有新的错误信息
- 测试错误边界是否正常工作
- 验证加载状态是否正确显示
注意事项
suppressHydrationWarning
应谨慎使用,只在必要时使用- 错误边界不会捕获异步错误,需要额外的错误处理
- 在生产环境中,调试信息会被自动隐藏
- 定期检查和更新错误处理逻辑