reactjs 在使用zustand保持状态更新方面存在问题

nwwlzxa7  于 2023-01-08  发布在  React
关注(0)|答案(1)|浏览(478)

我是新来的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

cvxl0en2

cvxl0en21#

这是@RyanZeelie的回答,值得一贴。
使用计数器存储()表示您正在调用应用运行时创建的应用商店。应用启动时,zustand创建商店。加载应用程序。现在,商店已创建,可通过调用useCounterStore在任何页面上访问()。这不会每次都创建存储。它已经创建。调用create()将创建一个新的存储区,但由于您是在组件中创建的,因此每次重新呈现该组件时
每当组件重新呈现时,你并不是在呈现整个应用,而是特定的组件。所以你是在呈现子组件,它在子组件中创建所有函数,从而抛出在该级别创建的存储,并重新创建它。

相关问题