mcpField
Z
zustand-patterns

zustand-patterns

github.com/yonatangross开发2991.5k 次安装今天更新
代码仓库

关于 zustand-patterns

面向使用 Zustand 5.x 管理 React 客户端状态的开发者,提供 TypeScript 类型化、状态切片、中间件和选择器优化指导。该技能还说明持久化迁移,并建议将服务端状态交给 TanStack Query。

主要功能

  1. 01TypeScript 类型化状态仓库
  2. 02单仓库切片组织方式
  3. 03Immer、持久化和 DevTools 中间件
  4. 04选择器与 useShallow 优化
  5. 05持久化状态版本迁移

适用场景

  1. 01为应用设置类型安全的状态仓库
  2. 02拆分大型状态以便维护
  3. 03保存客户端状态并迁移数据结构
  4. 04减少组件不必要的重新渲染

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yonatangross/orchestkit --skill zustand-patterns

安装后在 Claude Code 中输入/zustand-patterns确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

test-cases.json
checklists/
zustand-checklist.md
references/
anti-patterns-and-integration.md
ork-delta.md
rules/
_sections.md
_template.md
zustand-middleware-order.md
zustand-middleware-pitfalls.md
zustand-slice-pattern.md
scripts/
store-template.ts

详细介绍

Zustand 模式

使用 Zustand 5.x 进行现代状态管理——轻量、TypeScript 优先,无样板代码。

概览

  • 无需 Redux 的复杂性即可管理全局状态
  • 在组件间共享状态,无需逐层传递 props
  • 使用 localStorage/sessionStorage 持久化状态
  • 使用选择器计算/派生状态
  • 使用需要中间件的状态(日志记录、开发工具、持久化)

上游文档覆盖范围(不再赘述)

Zustand 自身的文档是机制的权威来源。本技能仅在 references/ork-delta.md、rules/ 文件和检查清单中补充 OrchestKit 的差异内容。

主题第一方来源
基本 store、create<State>()()、操作、异步操作https://github.com/pmndrs/zustand/blob/main/docs/reference/apis/create.md
Slices 模式(拆分和组合 store)https://github.com/pmndrs/zustand/blob/main/docs/learn/guides/slices-pattern.md
Slices 的类型定义和中间件 mutator 元组https://github.com/pmndrs/zustand/blob/main/docs/learn/guides/advanced-typescript.md
Immer 中间件(draft 变更)https://github.com/pmndrs/zustand/blob/main/docs/reference/middlewares/immer.md
persist:partialize、version、migrate、onRehydrateStorage、存储适配器https://github.com/pmndrs/zustand/blob/main/docs/reference/middlewares/persist.md
devtools:操作名称、enabled、serialize、tracehttps://github.com/pmndrs/zustand/blob/main/docs/reference/middlewares/devtools.md
subscribeWithSelector 和非 React 订阅https://github.com/pmndrs/zustand/blob/main/docs/reference/middlewares/subscribe-with-selector.md
选择器和 useShallow 重渲染控制https://github.com/pmndrs/zustand/blob/main/docs/learn/guides/prevent-rerenders-with-use-shallow.md
从 v4 迁移到 v5(createWithEqualityFn、最低 React 18)https://github.com/pmndrs/zustand/blob/main/docs/reference/migrations/migrating-to-v5.md
SSR 和水合https://github.com/pmndrs/zustand/blob/main/docs/learn/guides/ssr-and-hydration.md
Store 测试和重置https://github.com/pmndrs/zustand/blob/main/docs/learn/guides/testing.md
服务端状态归属(使用 TanStack Query,而非 Zustand)https://tanstack.com/query/latest/docs/framework/react/guides/does-this-replace-client-state

快速参考

// ✅ Create typed store with double-call pattern
const useStore = create<State>()((set, get) => ({ ... }));

// ✅ Use selectors for all state access
const count = useStore((s) => s.count);

// ✅ Use useShallow for multiple values (Zustand 5.x)
const { a, b } = useStore(useShallow((s) => ({ a: s.a, b: s.b })));

// ✅ Middleware order: immer → subscribeWithSelector → devtools → persist
create(persist(devtools(immer((set) => ({ ... })))))

// ❌ Never destructure entire store
const store = useStore(); // Re-renders on ANY change

// ❌ Never store server state (use TanStack Query instead)
const useStore = create((set) => ({ users: [], fetchUsers: async () => ... }));

关键决策

决策选项 A选项 B建议
状态结构单个 store多个 store在单个 store 中使用 Slices - 更便于跨 Slice 访问
嵌套更新展开运算符Immer 中间件Immer 适用于深层嵌套状态(3 层及以上)
持久化手动使用 localStoragepersist 中间件使用带 partialize 的 persist 中间件
多个值多个选择器useShallow选择 2-5 个相关值时使用 useShallow
服务端状态ZustandTanStack Query使用 TanStack Query - Zustand 用于仅客户端状态
开发工具始终启用有条件启用有条件启用 - enabled: process.env.NODE_ENV === 'development'

反模式与集成

禁止的模式(store 解构、派生状态、服务端状态、直接变更)以及 React Query 集成指南。

加载 Read("references/anti-patterns-and-integration.md"),查看反模式示例和 TanStack Query 分离模式。

相关技能

能力详情

store-creation

关键词:zustand、create、store、typescript、state 解决问题:使用正确的 TypeScript 类型推断设置类型安全的 Zustand store

slices-pattern

关键词:slices、modular、split、combine、StateCreator 解决问题:将大型 store 组织为易于维护、面向特定领域的 Slice

middleware-stack

关键词:immer、persist、devtools、middleware、compose 解决的问题:按正确顺序组合中间件,实现不可变性、持久化和调试

selector-optimization

关键词:selector、useShallow、重渲染、性能、记忆化 解决的问题:通过恰当的 selector 模式避免不必要的重渲染

persistence-migration

关键词:persist、localStorage、sessionStorage、迁移、版本 解决的问题:通过版本间的架构迁移持久化状态

参考资料

使用 Read("references/<file>") 按需加载:

文件内容
ork-delta.mdOrchestKit 专属规则:修正后的 zustand/shallow 标签、v5 最低版本、密钥处理、分级 slice 类型
anti-patterns-and-integration.md禁止的模式和 React Query 集成

其他资源:

  • 加载:Read("scripts/store-template.ts") - 可用于生产环境的 store 模板
  • 加载:Read("checklists/zustand-checklist.md") - 实现检查清单

评论

支持 Markdown