我创建了这个useEffect
构造,以首先启动验证,然后在数据通过验证后将其发布:
const isFirstRun = useRef(true);
useEffect(() => {
if (isFirstRun.current) {
isFirstRun.current = false;
return;
}
if (isProcessing) {
validate();
} else {
if (_.isEmpty(validationErrors)) {
console.log('*** Ready to POST ***');
}
}
}, [isProcessing]);
仅将isProcessing
作为useEffect
的唯一依赖项是完全可以的,但是VSCode linter坚持要同时包含validate
和validationErrors
。 / p>
我敢肯定,添加validate
不会造成任何问题,但是鉴于验证代码不断向validationErrors
添加项目,因此我不希望此useEffect
每次更改都被触发
您将如何处理这种情况?
答案 0 :(得分:3)
因为VSCode linter暗示它是最佳的遵循惯例。 您我的朋友通过仅触发useEffect以及仅在需要时(对于isProcessing进行更改)才是很好的选择,这是优化和减少应用程序处理负担的完美方法。
您的案例1:添加验证
您是正确的,因为函数引用未更改,因此不会触发useEffect
您的情况2:添加validationErrors
如果您的validate
函数修改了validationErrors
,这将是一个大问题,因为它将创建一大堆validationErrors
的修改,这将导致在某些情况下无限调用useEffect
具体情况。
是的,您可以忽略这些建议。 useEffect是一件非常了不起的事情,但是在处理它时应该小心。 :-)