Каков наилучший способ избежать активных крючков? - PullRequest
0 голосов
/ 06 февраля 2020

В настоящее время я использую хук useEffect для запуска какой-либо функции или обновления переменной в качестве эффекта изменения другого значения / переменной

пример:

 useEffect(() => {
   setValues(types[formStep]]);
 }, [formStep]);

Я использую приведенный выше код обновить переменную после того, как другая переменная была изменена, однако я продолжаю получать предупреждение, что
React Hook useEffect has a missing dependency 'types

и, конечно же, когда я включаю «типы» в качестве зависимости, приложение попадает в oop и я получаю следующую ошибку

Maximum update depth exceeded.

Каков наилучший способ добиться обновления переменной, но избежать ошибки? не только для этого примера для всех случаев, когда вам нужно обновить переменную в зависимости от другой переменной, изменяющейся перед ней.

1 Ответ

0 голосов
/ 06 февраля 2020

Каков наилучший способ обновить переменную, но избежать ошибки?

Это зависит от множества факторов: иногда использование ссылки (если вы не хотите инициировать обновление), иногда вы просто выводите состояние и нет необходимости в use-effect (я думаю, что это может быть вашим случаем), в других случаях вам нужно запускать обновление только при изменении определенных значений. Иногда следующее значение зависит от предыдущего, поэтому следует использовать перегрузку функции setState и избегать передачи предыдущего значения в качестве зависимости ... На эту проблему нет универсального c ответа.

Трудно понять, что происходит в вашем случае, без большего контекста. Тем не менее, я думаю, что у меня есть представление о том, что может происходить ... Это просто выстрел в темноте.

Является ли types Объектом, который вы определяете внутри функции компонента? Можете ли вы переместить это определение за пределы функции компонента? Потому что, если вы можете сделать это, тогда нет необходимости передавать его как зависимость.

Кроме того, вам действительно нужно использовать useState и useEffect для установки values? Вы действительно должны вызвать другое обновление? ты не можешь просто сделать это?

const values = types[formStep];
...