假设我使用useEffect在初始渲染时预取数据:
function myComponent(props) {
const { fetchSomething } = props;
...
...
useEffect(() => {
fetchSomething();
}, []);
...
...
}
我的linter警告我“ React Hook useCallback缺少依赖项”。它希望我将
fetchSomething
放入依赖项数组中。问题是,即使
fetchSomething
也要更改,我也不希望组件重新获取数据。正如我所看到的,在大多数情况下useEffect使用函数时,它实际上并不关心函数是否被更改。我不想关闭该警告,也不想在整个代码中散布
// eslint-disable-next-line react-hooks/exhaustive-deps
。这种行为背后的理性是什么?
这使我在使用钩子时感到不安全,就好像我做错了什么一样。
最佳答案
您可以使用useRef
挂钩来记住第一次渲染时props.fetchSomething
的值。这将解决您与eslint
有关的问题
function myComponent(props) {
const fetchSomethingRef = useRef(props.fetchSomething);
useEffect(() => {
fetchSomethingRef.current();
}, []);
}
useRef()钩不仅用于DOM引用。 “ ref”对象是一个通用容器,其当前属性是可变的,并且可以保存任何值,类似于类的实例属性。 more