Правило React Hooks Exustive-deps также требует наличия функций в массиве useEffect

так что у меня есть следующий эффект

  useEffect(() => {
    if (disabled) {
      setAnimatedValue(0);
    } else {
      setAnimatedValue(1);
    }
  }, [disabled]);

Это просто переводит кнопку в активированное или отключенное состояние, если disabled prop изменяется.

Я также добавил следующее правило в свою конфигурацию eslint

  'react-hooks/exhaustive-deps': 'warn',

Теперь я получаю предупреждение о том, что setAnimatedValue необходимо добавить в мой массив useEffect вместе с disabled опорой, но это просто функция, которая не является ни состоянием, ни опорой, поэтому, насколько я понимаю, она не должна туда входить.

Есть ли способ сделать так, чтобы это правило предупреждало только о том, что мне не хватает значения state или prop?


person Ilja    schedule 12.05.2019    source источник
comment
Думаю, вы ничего не можете сделать, кроме как игнорировать правило. Открыть выпуск в репо.   -  person Estus Flask    schedule 12.05.2019
comment
Это меня больше всего раздражает в правиле - в большинстве случаев оно полезно. Но функций включать не стоит.   -  person Daniel Cooke    schedule 08.09.2019


Ответы (1)


Если ваша функция setAnimation не полагается на внешнее состояние или свойства, то ее можно безопасно опустить.

т.е. если единственное, что setAnimation нужно для выполнения своего эффекта, - это переданное ему значение 0/1, то его можно безопасно пропустить.

Вероятно, это функция установки, так что вы в безопасности.

https://reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies.

person Daniel Cooke    schedule 08.09.2019