浅谈 NextJS RSC/SSR 中数据水合和持久化数据(一)

浅谈 NextJS RSC/SSR 中数据水合和持久化数据(一)

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文作者在重写个人站点时尝试了NextJS的RSC架构,并记录了一些实践经验。作者尝试了不同的数据传递方式,包括使用Zustand和React Query,但都存在问题。最后,作者决定使用Jotai作为数据管理方案。文章还提到了React Query的数据缓存和潜在的数据泄露问题。

🎯

关键要点

  • 作者在重写个人站点时尝试了NextJS的RSC架构,并记录了一些实践经验。
  • SSR架构中,服务端请求的数据必须与客户端一致,以避免水合错误。
  • RSC架构中,路由由服务端完全接管,需确保浏览器水合时数据一致。
  • 作者最初尝试的数据传递方式是通过props传递可序列化的数据。
  • 使用Zustand作为状态管理方案未能解决水合错误,作者决定转向Jotai。
  • React Query提供了Hydrate组件,但无法精确控制组件的粒度更新。
  • 使用React Query时需在Server端建立QueryClient,并在Hydrate时使用Server Side的QueryClient。
  • 数据缓存的cacheTime参数影响Query实例的存在时间,需合理设置以避免数据丢失。
  • 潜在的数据泄露问题:多个用户访问同一站点时,QueryClient可能缓存不同用户的数据。
  • 建议通过meta键值控制哪些query需要hydrate,以避免敏感数据泄露。
  • React Query的复杂性促使作者考虑其他数据管理方案,如Jotai。
➡️

继续阅读