状态处理
深层次状态处理
Section titled “深层次状态处理”- zustand 会自动合并第一层的 state
- 对于深层次的状态更新,需要使用到 immer 中间件来解决
import { create } from "zustand";
interface User { user: { name: string; age: number; }; updateUser: () => void;}
const useUserStore = create<User>((set, get) => ({ user: { name: "admin", age: 18, }, updateUser: () => set((prevState) => ({ user: { ...prevState.user, // 需要手动合并状态 age: prevState.user.age + 1, }, })),}));
export default useUserStore;使用 immer 中间件
Section titled “使用 immer 中间件”const data = { user: { name: "admin", age: 18, },};
// 使用produce创建新状态const newData = produce(data, (draft) => { // 直接修改draft对象,immer会自动生成新的状态 draft.user.age += 1;});
console.log(newData); // 输出: { user: { name: 'admin', age: 19 } }console.log(data); // 输出: { user: { name: 'admin', age: 18 } }在 zustand 中使用
Section titled “在 zustand 中使用”import { create } from "zustand";import { immer } from "zustand/middleware/immer";
interface User { user: { name: string; age: number; }; updateUser: () => void;}
const useUserStore = create<User>()( immer((set) => ({ user: { name: "admin", age: 18, }, updateUser: () => set((prevState) => { prevState.user.age += 1; }), })),);
export default useUserStore;