指定或不指定所有 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 坚持认为 validatevalidationErrors 也包括在内。

我确信添加 validate 不会导致任何问题,但考虑到验证代码不断向 validationErrors 添加项目,我不希望每次都触发此 useEffect变了。

你会如何处理这种情况?

只是因为 VSCode linter 建议它不要将其作为最佳实践来遵循。 你我的朋友做得很好,只触发 useEffect 并且只在你需要时,在你的情况下,当 isProcessing 发生变化时,这是优化和减少应用程序处理负载的完美方法。

您的案例 1:添加验证

你在某种程度上是正确的,因为函数引用没有改变,所以它不会触发 useEffect

您的案例 2:添加验证错误

如果您的 validate 函数修改 validationErrors,这可能是个大问题,因为它会创建一个大的 validationErrors 修改链,这将导致无限调用 useEffect在某些特定情况下。

是的,您可以忽略这些建议。 useEffect 是一件非常棒的事情,但在处理它时应该小心。 :-)