【发布时间】:2020-05-11 20:09:15
【问题描述】:
所以我有一个看起来像
的组件const App = () => {
const someContextValue = useSomeContext(); //custom hook that calls useContext
useEffect(() => {
someContextValue()
}, [someContextValue]);
return <div />
}
每当组件重新渲染时,即使 someContextValue 并没有真正改变,也会触发 useEffect。
我通过使用 useMemo 来解决这个问题
const someContextValue = useMemo(useSomeContext, [useSomeContext])
现在 someContextValue 在重新渲染时不会改变。但我觉得这不太对。这样做的正确方法是什么?
【问题讨论】:
-
上下文值已更改。因为值是在组件内部定义的,而组件是一个函数。当一个函数运行时,它内部定义的值被定义。当您调用
useSomeContext()时,您正在创建一个新对象,并且每次组件呈现时都会发生这种情况。这与状态值不同,状态值不会被重新定义,useState钩子会维护该值的相同实例,因此不会每次都重新创建它。 -
我已将我的评论添加为更详细的答案。
标签: reactjs react-hooks use-context