Skip to content

状态处理

  1. zustand 会自动合并第一层的 state
  2. 对于深层次的状态更新,需要使用到 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;
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 } }
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;