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