本文档介绍了如何在 Next.js 等服务器端渲染 (SSR) 框架中使用 Zustand。它涵盖了 SSR 环境中全局状态管理的挑战、每个请求的 store 创建、正确的 hydration 技术以及防止常见问题的最佳实践。有关 Next.js 集成的更多详细信息,请参阅 Next.js 设置。
服务器端渲染为 Zustand 等状态管理库带来了独特的挑战。由于 Zustand store 通常作为模块级别的单例创建,它们可能在服务器端渲染环境中引起问题,在这些环境中:
来源:docs/guides/ssr-and-hydration.md6-10 docs/guides/nextjs.md13-22
在使用 Zustand 进行 SSR 时,您需要遵循以下核心原则:
来源:docs/guides/nextjs.md26-33 docs/guides/ssr-and-hydration.md91-97
为防止状态在请求之间泄露,请实施每个请求的 store 创建模式:
推荐的方法是使用 `zustand/vanilla` 中的 `createStore` 来创建一个 store 工厂:
来源:docs/guides/nextjs.md72-98 docs/guides/nextjs.md106-149
Store 创建模式通常使用包含以下关键元素的 provider 组件:
此模式避免了模块级别的 store 实例,这些实例会在请求之间共享
来源:docs/guides/nextjs.md106-149
在 Next.js App Router 中,请遵循以下最佳实践:
典型文件结构
来源:docs/guides/nextjs.md320-402
在 Next.js Pages Router 中,请使用以下模式:
来源:docs/guides/nextjs.md254-317
当服务器和客户端渲染不同的内容时,会发生 Hydration 不匹配,这会导致 React 警告或错误。
来源:docs/guides/ssr-and-hydration.md188-197
在测试 SSR 应用程序时,您通常需要在测试之间重置 store。此模式创建一个函数,用于将 store 重置为其初始状态:
来源:docs/guides/testing.md84-149 docs/guides/how-to-reset-state.md44-68
以下是支持 SSR 的 Zustand store 的完整示例:
这些组件共同确保:
来源:docs/guides/nextjs.md72-98 docs/guides/nextjs.md106-149 docs/guides/nextjs.md322-346