SuperAPI AI 工具集

zustand_state

前端与建站

查看项目

更新于 10-16 04:26

技能介绍

用途

本技能面向在 React 应用中使用 Zustand 进行状态管理的开发场景,提供经过生产验证的配置方案。它强调最小化 API、无样板代码、TypeScript 优先、细粒度订阅带来的性能优势,并内置对持久化、DevTools 等中间件的支持。

主要能力

  • 提供三种基础配置模式:JavaScript 基础 Store、TypeScript Store(推荐)、持久化 Store。
  • 覆盖中间件配置:persist(localStorage/sessionStorage)、devtools(Redux DevTools)、immer(可变更新)、自定义中间件,以及多中间件组合。
  • 提供常见模式:计算/派生值、异步操作、重置 Store、带参数的 Selector。
  • 预防 5 类已知问题:Next.js 水合不匹配、TypeScript 双括号缺失、persist 中间件导入错误、无限渲染循环、Slices 模式 TypeScript 复杂度。
  • 附带 8 个即用模板文件(basic-store.ts、typescript-store.ts、persist-store.ts、slices-pattern.ts、devtools-store.ts、nextjs-store.ts、computed-store.ts、async-actions-store.ts)。
  • 附带深度参考文档(middleware-guide.md、typescript-patterns.md、nextjs-hydration.md、migration-guide.md)与版本检查脚本 check-versions.sh。
  • 支持 Vanilla Store(不依赖 React)用法。

使用方式

安装 Zustand:

npm install zustand
# 或
pnpm add zustand
# 或
yarn add zustand

创建 Store(TypeScript 示例):

import { create } from 'zustand'

interface BearStore {
  bears: number
  increase: (by: number) => void
  reset: () => void
}

const useBearStore = create<BearStore>()((set) => ({
  bears: 0,
  increase: (by) => set((state) => ({ bears: state.bears + by })),
  reset: () => set({ bears: 0 }),
}))

在组件中使用:

import { useBearStore } from './store'

function BearCounter() {
  const bears = useBearStore((state) => state.bears)
  return <h1>{bears} around here...</h1>
}

function Controls() {
  const increase = useBearStore((state) => state.increase)
  return <button onClick={() => increase(1)}>Add bear</button>
}

持久化 Store 示例:

import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'

interface UserPreferences {
  theme: 'light' | 'dark' | 'system'
  language: string
  setTheme: (theme: UserPreferences['theme']) => void
  setLanguage: (language: string) => void
}

const usePreferencesStore = create<UserPreferences>()(
  persist(
    (set) => ({
      theme: 'system',
      language: 'en',
      setTheme: (theme) => set({ theme }),
      setLanguage: (language) => set({ language }),
    }),
    {
      name: 'user-preferences',
      storage: createJSONStorage(() => localStorage),
    },
  ),
)

使用模板:

cp ~/.claude/skills/zustand-state-management/templates/typescript-store.ts src/store/

版本检查:

cd your-project/
~/.claude/skills/zustand-state-management/scripts/check-versions.sh

适用场景

  • React 应用中的客户端状态管理。
  • 需要状态跨页面刷新保留(localStorage/sessionStorage)。
  • 需要 Redux DevTools 调试。
  • Next.js 项目中的 SSR 安全状态管理。
  • 大型复杂 Store 的模块化组织(Slices 模式)。
  • 从 Redux、Context API 或 Zustand v4 迁移。

限制

  • 不适用于服务端状态管理,官方建议改用 TanStack Query。
  • 依赖 React 18+ 与 TypeScript 5+(TypeScript 为可选但推荐)。
  • 最新版本为 zustand@5.0.8,v4.x 使用不同 API。
  • 在 SSR 中访问 localStorage 需配合水合检查,否则会出现水合不匹配。
  • 具体收费、价格、平台等信息暂未提供。