Эффект использования сохраняется в вечном цикле

#javascript #reactjs #use-effect

#javascript #reactjs #use-effect

Вопрос:

Я получал это предупреждение из-за отсутствия denpendecy в useEffect:

  useEffect(() => {
      handleRadioGroup(value)
    }, [value]) 

У React Hook useEffect отсутствует зависимость: ‘handleRadioGroup’. Либо включите его, либо удалите массив зависимостей react-hooks / исчерпывающий-deps

Поэтому я попытался использовать useCallback, чтобы запускать useEffect только при изменении этой функции handleRadioGroup.

   const handleRadioSelection = useCallback((value) => {
  handleRadioGroup(value)
}, [handleRadioGroup])

useEffect(() => {
   handleRadioSelection(value)
}, [value, handleRadioSelection]) 

Проблема в том, что useEffect выполняется во внутреннем цикле. Если я печатаю функцию useCallback, она каждый раз показывает один и тот же результат. Есть способ удалить это предупреждение, не входя в вечный цикл?

Комментарии:

1. работает ли следующий код для вас ` useEffect(() => {handleRadioGroup(значение) }, [значение, handleRadioGroup])`

2. Нет, происходит то же самое

3. без «useCallback», просто «useEffect» с [value, handleRadioGroup] в зависимости

4. Происходит то же самое, я пробовал это до решения useCallback

5. вы не должны использовать «useCallback» только для устранения предупреждения. Что-то не так с компилятором, зависимость [значение, handleRadioGroup] — допустимы.

Ответ №1:

Эти бесконечные вызовы, как правило, происходят из-за того, что значение переменной в вашем массиве зависимостей, в вашем случае value или handleRadioSelection , изменяется внутри перехвата. Если это ваш случай, вам придется переосмыслить свою логику, чтобы убедиться, что значения внутри нее не меняются.