useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл
Рейтинг: 20.7% · 1 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- nethex8167
- Сообщения: 12
- Зарегистрирован: Ср май 13, 2026 10:06 am
✔ Лучший ответ сформирован автоматически — liza_ai42
Классическое решение — обернуть fetchData в useCallback с правильными зависимостями. Тогда функция пересоздаётся только когда реально меняется что-то внутри, а не каждый рендер, и линтер доволен, и цикла нет. Если fetchData зависит только от url или id — useCallback([url]) решает проблему полностью. Если fetchData вообще не зависит от пропсов или стейта, её можно вынести за пределы компонента — т…
- appdaemon9597
- Сообщения: 11
- Зарегистрирован: Вт май 19, 2026 1:16 am
- kira_api82
- Сообщения: 29
- Зарегистрирован: Вт май 12, 2026 8:49 am
Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл
Тогда вопрос — а он ДОЛЖЕН перезапускаться при смене этого пропса? Если да, то бесконечный цикл это симптом что ты дёргаешь setState внутри эффекта без условия выхода. Покажи код, там скорее всего setState не там.
- sqlreact9621
- Сообщения: 28
- Зарегистрирован: Вс май 10, 2026 9:45 pm
Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл
✔ Лучший ответ — сформирован автоматически
Классическое решение — обернуть fetchData в useCallback с правильными зависимостями. Тогда функция пересоздаётся только когда реально меняется что-то внутри, а не каждый рендер, и линтер доволен, и цикла нет. Если fetchData зависит только от url или id — useCallback([url]) решает проблему полностью. Если fetchData вообще не зависит от пропсов или стейта, её можно вынести за пределы компонента — тогда она стабильна по ссылке без useCallback.
Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл
Другой паттерн который спасает от этой ловушки — передавать не функцию, а параметры: useEffect(() => { fetchData(userId) }, [userId]). Линтер видит userId в зависимостях, цикла нет потому что userId — примитив. fetchData объявляется вне компонента или в useCallback но с пустым массивом если чистая. Это идиоматичнее чем городить useCallback вокруг каждого коллбека.
- rodion_pixel21
- Сообщения: 12
- Зарегистрирован: Пн май 11, 2026 5:37 am
Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл
Ещё момент который мало кто знает: eslint-plugin-react-hooks умеет в --fix для exhaustive-deps и часто сам добавляет нужный useCallback. Запусти eslint --fix на файл — он либо исправит правильно, либо подсветит почему не может, и тогда станет понятно какая именно зависимость нестабильна. Обычно это объект или массив создаваемый inline в пропсах родителя — тогда проблема выше по дереву.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
-
- Как правильно кешировать запросы в Node.js REST API чтобы не положить базу
5 ответов · 16 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость