API 参考
create()
使用给定的状态创建函数创建一个 store。
import { create } from 'zustand'
const useStore = create((set, get, api) => ({
// state
count: 0,
// actions
increment: () => set((state) => ({ count: state.count + 1 })),
}))参数
stateCreator- 接收 set、get 和 api 的函数
返回值
一个可用于访问 store 的 React hook
set()
更新 store 状态。可以使用部分状态对象或更新函数调用。
// Partial update
set({ count: 1 })
// Updater function
set((state) => ({ count: state.count + 1 }))
// Replace entire state (not recommended)
set({ count: 0 }, true)参数
partial- 部分状态对象或更新函数replace- (可选)替换整个状态而不是合并
get()
获取当前状态。在操作中或 React 组件外部很有用。
const useStore = create((set, get) => ({
count: 0,
double: () => {
const currentCount = get().count
set({ count: currentCount * 2 })
}
}))subscribe()
订阅状态更改。每当状态更新时调用。
const unsubscribe = useStore.subscribe(
(state) => console.log('State changed:', state)
)
// Later...
unsubscribe()中间件
persist()
将 store 状态持久化到 localStorage 或 sessionStorage。
import { create } from 'zustand'
import { persist } from 'zustand/middleware'
const useStore = create(
persist(
(set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
}),
{
name: 'counter-storage',
}
)
)devtools()
启用 Redux DevTools 集成以进行调试。
import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
const useStore = create(
devtools((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
}))
)immer()
启用 Immer 以更轻松地进行不可变更新。
import { create } from 'zustand'
import { immer } from 'zustand/middleware/immer'
const useStore = create(
immer((set) => ({
todos: [],
addTodo: (text) =>
set((state) => {
state.todos.push({ id: Date.now(), text })
}),
}))
)选择器
选择状态的特定部分以优化重新渲染。
// Select entire state
const state = useStore()
// Select specific property
const count = useStore((state) => state.count)
// Select with transformation
const doubled = useStore((state) => state.count * 2)
// Multiple selectors
const count = useStore((state) => state.count)
const increment = useStore((state) => state.increment)