Указывать или не указывать все зависимости useEffect - PullRequest
4 голосов
/ 07 октября 2019

Я создал эту 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 срабатывал при каждом изменении.

Как бы вы справились с этой ситуацией?

1 Ответ

3 голосов
/ 07 октября 2019

Просто потому, что VSCode linter предлагает это сделать, сделайте его лучшей практикой. Вы, мой друг, отлично справляетесь, только вызывая useEffect только и только тогда, когда вам требуется, в вашем случае, когда изменяется isProcessing, это идеальный способ оптимизировать и снизить нагрузку на обработку приложения.

Ваш случай 1: Добавление validate

Вы как-то правы, так как ссылка на функцию не изменяется, поэтому она не будет вызывать useEffect

Ваш случай 2: Добавление validationErrors

Это может быть большой проблемой, если ваша validate функция модифицирует validationErrors, так как она создаст большую цепочку validationErrors модификации, которая приведет к бесконечному вызову useEffect в некоторых особых случаях.

Такда, вы можете игнорировать это предложение. useEffect - действительно замечательная вещь, но с ней нужно быть осторожным. :-)

...