【发布时间】:2020-10-17 10:57:32
【问题描述】:
当我将函数表达式传递到 useEffect 依赖数组时,为什么会创建一个无限循环?函数表达式不会改变组件状态,它只是引用它。
// component has one prop called => sections
const markup = (count) => {
const stringCountCorrection = count + 1;
return (
// Some markup that references the sections prop
);
};
// Creates infinite loop
useEffect(() => {
if (sections.length) {
const sectionsWithMarkup = sections.map((section, index)=> markup(index));
setSectionBlocks(blocks => [...blocks, ...sectionsWithMarkup]);
} else {
setSectionBlocks(blocks => []);
}
}, [sections, markup]);
如果标记改变了状态,我可以理解为什么它会创建一个无限循环,但它不是简单地引用 section 属性。
对于那些寻求解决这个问题的人
const markup = useCallback((count) => {
const stringCountCorrection = count + 1;
return (
// some markup referencing the sections prop
);
// useCallback dependency array
}, [sections]);
所以我不是在寻找这个问题的代码相关答案。如果可能的话,我正在寻找关于为什么会发生这种情况的详细解释。
我更感兴趣的是为什么,然后只是简单地找到解决问题的答案或正确方法。
为什么在 useEffect 之外声明的 useEffect 依赖数组中传递一个函数会导致在所述函数中的状态和道具都未更改时重新渲染。
【问题讨论】:
-
查看此文档以获得更多说明:[1]:reactjs.org/docs/…
标签: reactjs react-hooks use-effect usecallback