@trim189

Infinite loop в useEffect, как избежать?

Я пытаюсь создать автоселект, если в элементах только один параметр. К сожалению, значения options с сервера передаются несколько раз, что замедляет работу кода и в какой-то момент код перестает работать. появляется ошибка infinite loop
const {setFieldValue, errors, setFieldError} = form
  const error = get(errors, name)
  const prevOptionsRef = useRef(options)
  const [currentOptions, setCurrentOptions] = useState(() => {
    if (!isEmpty(other)) {
      if (value && other.find((o) => o.value === value.value)) {
        return [...options, ...other]
      }
      return [...options, {label: t('OTHER'), value: 'other_value_button'}]
    }
    return options
  })

 const isOnlyOneOption = options.length === 1
  const [firstOption] = options
  useEffect(() => {
    if (isOnlyOneOption) {
      console.log('firstOption:', firstOption)
      setFieldValue(name, firstOption)
      if (error) setFieldError(name, undefined)
    }
  }, [isOnlyOneOption, firstOption])


На определенном селекте, описанный код перестает работать (перестает работать автоселект), появляется бесконечный цикл
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы