Zustand状态管理

基础Store

import { create } from 'zustand'

// Define store with TypeScript
interface BearStore {
  bears: number
  addBear: () => void
  removeAllBears: () => void
}

const useBearStore = create<BearStore>((set, get) => ({
  bears: 0,
  addBear: () => set(state => ({ bears: state.bears + 1 })),
  removeAllBears: () => set({ bears: 0 }),
  // Access other state via get()
  doubleBears: () => get().bears * 2,
}))

// Usage in component
function BearCounter() {
  const bears = useBearStore(state => state.bears) // selective subscribe
  const addBear = useBearStore(state => state.addBear)
  return <button onClick={addBear}>Bears: {bears}</button>
}

持久化中间件

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

const useStore = create(
  persist(
    (set) => ({
      token: null,
      setToken: (token) => set({ token }),
    }),
    {
      name: 'auth-storage',          // localStorage key
      storage: createJSONStorage(() => sessionStorage), // or localStorage
      partialize: (state) => ({ token: state.token }), // only persist token
    }
  )
)

Zustand vs Redux

ZustandRedux Toolkit
包大小~2KB~40KB
模板代码极少中等
学习曲线中高
DevTools是(devtools中间件)出色
时间旅行调试有限
适合中小应用大型企业应用