指定或不指定所有 useEffect 依赖项
To specify or not specify all useEffect dependencies
我已经创建了这个 useEffect
构造来首先启动验证,然后 POST 如果数据通过验证:
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
也包括在内。
我确信添加 validate
不会导致任何问题,但考虑到验证代码不断向 validationErrors
添加项目,我不希望每次都触发此 useEffect
变了。
你会如何处理这种情况?
只是因为 VSCode linter 建议它不要将其作为最佳实践来遵循。
你我的朋友做得很好,只触发 useEffect 并且只在你需要时,在你的情况下,当 isProcessing 发生变化时,这是优化和减少应用程序处理负载的完美方法。
您的案例 1:添加验证
你在某种程度上是正确的,因为函数引用没有改变,所以它不会触发 useEffect
您的案例 2:添加验证错误
如果您的 validate
函数修改 validationErrors
,这可能是个大问题,因为它会创建一个大的 validationErrors
修改链,这将导致无限调用 useEffect
在某些特定情况下。
是的,您可以忽略这些建议。
useEffect 是一件非常棒的事情,但在处理它时应该小心。 :-)
我已经创建了这个 useEffect
构造来首先启动验证,然后 POST 如果数据通过验证:
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
也包括在内。
我确信添加 validate
不会导致任何问题,但考虑到验证代码不断向 validationErrors
添加项目,我不希望每次都触发此 useEffect
变了。
你会如何处理这种情况?
只是因为 VSCode linter 建议它不要将其作为最佳实践来遵循。 你我的朋友做得很好,只触发 useEffect 并且只在你需要时,在你的情况下,当 isProcessing 发生变化时,这是优化和减少应用程序处理负载的完美方法。
您的案例 1:添加验证
你在某种程度上是正确的,因为函数引用没有改变,所以它不会触发 useEffect
您的案例 2:添加验证错误
如果您的 validate
函数修改 validationErrors
,这可能是个大问题,因为它会创建一个大的 validationErrors
修改链,这将导致无限调用 useEffect
在某些特定情况下。
是的,您可以忽略这些建议。 useEffect 是一件非常棒的事情,但在处理它时应该小心。 :-)