首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用setState函数更新Zustand状态

无法使用setState函数更新Zustand状态
EN

Stack Overflow用户
提问于 2021-09-25 15:28:13
回答 1查看 439关注 0票数 0

Comp1中,当我将鼠标悬停在它上面时,我希望状态变为true (我将true参数传递给它)。此外,我还希望确保这样做不会导致Comp2组件重新呈现。

我的理解是,如果我喜欢useStoreOnHover.setState({ onComp1: true }),它应该可以工作,但它不能:(

我也尝试过const onComp1Set = useStoreOnHover((s) => s.onComp1Set),但仍然是一样的:

我能够让它工作的唯一方法是通过const { onComp1Set } = useStoreOnHover(),但我正在努力避免这种类型的解构,因为它也会触发对其他组件的重新渲染。

现场示例:https://codesandbox.io/s/winter-grass-qxrv8

代码语言:javascript
复制
import create, { GetState, SetState } from "zustand";

type typeStoreOnHover = {
  onComp1: boolean;
  onComp1Set: (val: boolean) => void;

  onComp2: boolean;
};

export const useStoreOnHover = create<typeStoreOnHover>(
  (set: SetState<typeStoreOnHover>, get: GetState<typeStoreOnHover>) => {
    return {
      onComp1: false,
      onComp1Set: (val) => set({ onComp1: val }),

      onComp2: false
    };
  }
);

const Comp1 = () => {
  const onComp1 = useStoreOnHover.getState().onComp1;
  // const onComp1Set = useStoreOnHover((s) => s.onComp1Set);

  console.log("Comp 1", onComp1);
  return (
    <div
      onMouseEnter={() => {
        // onComp1Set(true);
        useStoreOnHover.setState({ onComp1: true });
      }}
    >
      Comp 1 {onComp1 ? "True" : "False"}
    </div>
  );
};

const Comp2 = () => {
  const onComp2 = useStoreOnHover((s) => s.onComp2);

  console.log("Comp 2", onComp2);

  return <div>Comp 2 </div>;
};

export default function App() {
  return (
    <>
      <Comp1 />
      <Comp2 />
    </>
  );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 15:50:55

根据zustand文档,这应该是实际的方法,

代码语言:javascript
复制
const onComp1 = useStoreOnHover((s) => s.onComp1);

我已经在你的CodeSandBox链接上测试过了,它起作用了。

我不熟悉zustand库,但这可能会对您有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69327568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档