能否在Zustand的一个Store中修改另一个Store的状态?请完成代码修改
在Zustand中跨Store修改状态
当然可以在一个Store内部修改另一个Store的状态,Zustand并没有限制这种跨Store操作,下面提供两种常见实现方式:
方法一:封装目标Store的修改方法后调用
先给forestStore添加一个专门用于增加动物数量的方法,再在bearStore的increasePopulation里调用这个方法:
const bearStore = create((set) => ({ bears: 0, increasePopulation: () => { // 增加bears数量 set((state) => ({ bears: state.bears + 1 })); // 调用forestStore的方法增加animals数量 forestStore.getState().increaseAnimals(); }, })) const forestStore = create((set) => ({ animals: 0, // 暴露修改animals的方法 increaseAnimals: () => set((state) => ({ animals: state.animals + 1 })), }))
方法二:直接调用目标Store的setState
Zustand创建的Store实例自带setState方法,你可以直接在bearStore中调用它修改forestStore的状态:
const bearStore = create((set) => ({ bears: 0, increasePopulation: () => { set((state) => ({ bears: state.bears + 1 })); // 直接修改forestStore的animals状态 forestStore.setState((state) => ({ animals: state.animals + 1 })); }, })) const forestStore = create((set) => ({ animals: 0, }))
两种方式都能满足需求:方法一更贴合单一职责原则,把状态修改逻辑封装在对应Store内;方法二更简洁直接,适合简单场景。
内容的提问来源于stack exchange,提问作者user22191766
相关产品推荐
相关产品推荐

