指定或不指定所有useEffect依赖项

时间:2019-10-07 15:06:05

标签: reactjs use-effect

我创建了这个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坚持要同时包含validatevalidationErrors。 / p>

我敢肯定,添加validate不会造成任何问题,但是鉴于验证代码不断向validationErrors添加项目,因此我不希望此useEffect每次更改都被触发

您将如何处理这种情况?

1 个答案:

答案 0 :(得分:3)

因为VSCode linter暗示它是最佳的遵循惯例。 您我的朋友通过仅触发useEffect以及仅在需要时(对于isProcessing进行更改)才是很好的选择,这是优化和减少应用程序处理负担的完美方法。

您的案例1:添加验证

您是正确的,因为函数引用未更改,因此不会触发useEffect

您的情况2:添加validationErrors

如果您的validate函数修改了validationErrors,这将是一个大问题,因为它将创建一大堆validationErrors的修改,这将导致在某些情况下无限调用useEffect具体情况。

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