我是新来的zustand和目前的经验,建立国家由它。
在我的应用程序中,我有两个组件;一个是父级,另一个是子级,由父级 Package 。
我尝试了不同的方法在子级中创建状态。但是,结果不如预期,因为创建的状态无法在子级中更新。
为什么会这样?
App.js:
import "./styles.css";
import useCounterStore from "./hooks/useCounterStore";
import Child from "./Child";
export default function App() {
const { count, add } = useCounterStore();
return
(
<div>
Parent
<div className="childContainer">
<Child name="child1"></Child>
<Child name="child2"></Child>
</div>
<p>{count}</p>
<button onClick={add}>Add</button>
</div>
);
}
Child.js:
import create from "zustand";
export default function Child(props) {
const { name } = props;
const { count, add } = create((set) => ({
count: 1,
add: () => set((state) => ({ count: state.count + 1 }))
}))();
return (
<div className="child">
<p>{name}</p>
<p>{count}</p>
<button onClick={add}>Add</button>
</div>
);
}
useCounterStore.js
import create from "zustand";
const useCounterStore = create((set) => ({
count: 1,
add: () => set((state) => ({ count: state.count + 1 }))
}));
export default useCounterStore;
儿童计数始终保持在1
1条答案
按热度按时间cvxl0en21#
这是@RyanZeelie的回答,值得一贴。
使用计数器存储()表示您正在调用应用运行时创建的应用商店。应用启动时,zustand创建商店。加载应用程序。现在,商店已创建,可通过调用useCounterStore在任何页面上访问()。这不会每次都创建存储。它已经创建。调用create()将创建一个新的存储区,但由于您是在组件中创建的,因此每次重新呈现该组件时
每当组件重新呈现时,你并不是在呈现整个应用,而是特定的组件。所以你是在呈现子组件,它在子组件中创建所有函数,从而抛出在该级别创建的存储,并重新创建它。