SuperAPI AI 工具集

zustand-state-builder

前端与建站

查看项目

更新于 10-18 23:17

技能介绍

zustand-state-builder 面向使用 Zustand 的 React(或 TypeScript)项目,目标是用极小 API 建立轻量、可扩展的状态管理,并覆盖类型定义、中间件、模块拆分与测试的常见做法。

一、用途 用于识别需要放入全局状态的内容,定义 state 结构与 action,添加 TypeScript 类型,按需启用 devtools、persist、immer 等中间件,在大型应用中拆分为模块化 slices,并在组件中通过 hooks 或选择器访问状态。资料也强调区分客户端状态与服务端状态,建议服务端数据交由 TanStack Query 管理。

二、主要能力与示例

  1. 基础 store:以 counter 为例,展示 create、set、状态字段与 increment、decrement、reset、incrementBy 等 action。
  2. 异步 action:users store 演示 fetchUsers、addUser、deleteUser,包含 isLoading、error 状态,以及删除时的乐观更新与失败回滚。
  3. DevTools:通过 devtools 中间件包装 store,设置 name,并在 set 的第三个参数传入 action 名称。
  4. 持久化:使用 persist 与 createJSONStorage(() => localStorage),以 name 指定 localStorage key,并通过 partialize 只持久化需要的字段。
  5. Immer:使用 immer 中间件以可变写法更新嵌套状态,示例为 todos 的增删改与切换完成状态。
  6. 中间件组合:devtools(persist(immer(...))) 的嵌套组合方式。
  7. Slices 模式:将 authSlice、cartSlice 分别用 StateCreator 定义,再在 index 中合并为 StoreState,并可对持久化字段做部分选择。
  8. 选择器优化:通过单值选择器减少重渲染;对多个值使用 shallow 比较;提供可复用的 selector hooks(如 useAuth、useCart、useCartTotal)。
  9. React 外部访问:使用 useStore.getState、setState、subscribe,并演示订阅整个状态或特定切片。
  10. 服务端状态整合:UI 状态留在 Zustand,用户数据用 TanStack Query 的 useQuery、useMutation 与 invalidateQueries 管理。
  11. 测试:使用 @testing-library/react 的 renderHook 与 act,配合 setState 重置 store,对 action 与状态变化做单元测试。
  12. 最佳实践清单:store 保持小、按领域拆分;使用选择器;分离客户端与服务端状态;启用 devtools;完整 TypeScript 类型;嵌套状态用 immer;谨慎持久化;为 store 编写单元测试;并给出每条 store 应包含项的检查清单。

三、使用方式 安装:npm install zustand;如需不可变更新可安装 npm install immer。按示例创建 stores 目录中的文件,定义接口与 create,按需包裹中间件,在组件中调用对应 hook 或选择器。

四、适用场景 适合需要轻量全局状态、频繁读取与更新客户端 UI 状态、需要持久化少量设置、需要 devtools 调试、以及希望通过 slices 拆分大型 store 的 React/TypeScript 项目。

五、限制 资料未提供与具体框架版本、构建工具、浏览器兼容性、性能基准、收费或授权方式相关的信息;未说明与其他状态库的对比数据;示例中的接口路径(如 /api/users)与字段需按实际项目调整。