【发布时间】:2021-01-08 07:22:46
【问题描述】:
在我的功能组件中,我有状态,每当它发生变化时,我都想做一些事情。所以我使用了useEffect,但它给出了“依赖缺失”错误。在我将错误中显示的所有依赖项放入之后,我得到了无限循环。代码如下:
const [keywords, setKeywords] = useState<Keyword[]>();
const [currentPage, pagingConfig, setPagingConfig] = usePaging();
useEffect(() => {
const loadKeywords = async () => {
const { current, pageSize } = pagingConfig;
const keywords = await getKeywords(current as number, pageSize as number);
setKeywords(keywords.data.data);
setPagingConfig({
...pagingConfig,
total: keywords.data.total,
});
};
loadKeywords();
}, [currentPage]); // Requires to add pagingConfig and setPagingConfig
如果添加了所需的依赖项,我将获得无限循环。
我怎样才能避免这个错误?
【问题讨论】:
-
是错误还是 ESlint 警告?
-
发生这种情况是因为
setPagingConfig更新了useEffect中的状态,然后useEffect重新运行,因为pagingConfig发生了变化,然后setPagingConfig更新了useEffect中的状态...你明白了。如果 pagingConfig 实际上有不同的keywords.data.total,您应该只更新它 -
这是一个 ESLint 警告
-
需要谨慎对待该特定警告。很多时候,它可以甚至必须被忽略。没有它,您的代码可以正常工作。不是吗?我不确定是什么原因,但我认为可能是如果你通过 const 声明一个函数,ESLint 不会立即正确识别它
标签: reactjs react-hooks infinite-loop react-state react-functional-component