如果用户在一个表中选择了大量的元素,我需要显示一个吐司_message。toast message函数是一个自定义钩子的返回,但是如果我在zustand中调用一个Hook,应用程序会给我一个错误“Invalid hook call. Hooks can only be called inside of the body of a function component.这可能是由于以下原因之一发生的:
1.你可能有不匹配的React版本和渲染器(比如React DOM)
1.你可能违反了钩的规则
1.你可能在同一个应用程序中有多个React副本。
我不能显示代码,因为是企业代码。
但我的问题是,是否有可能在zustand create或set中调用一个钩子?
我试图在create内部调用一个钩子,但在返回store状态之前。
例如在下面的代码中,但在我的代码中是一个自定义钩子而不是useState。
export const storeExample = create<{
count: number;
increaseCount: () => void;
}>()((set) => {
const someState = useState("");
return {
count: 0,
increaseCount: () => set((state) => ({ count: state.count + 1 })),
};
});
字符串
1条答案
按热度按时间7d7tgy0s1#
你不能直接使用
zustand
。根据这一点,你甚至可以在没有react的情况下使用zustand
,根据zustand
-Repository中的this讨论,其中一个维护者解释说:Store定义是纯JS的。你想从store钩子创建一个新钩子。
这意味着您不能在还原器中使用Hooks。
他举了一个例子来说明如何解决这个问题:
字符串
这里还有一个例子,你可以将
customFetch
输入到store action中,但仍然在你的store外部使用一个单独的Hook。在这种情况下,你需要注意这个action依赖于customFetch
作为外部的arg输入,这最终意味着它不能被直接调用。型