useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Рейтинг: 20.7% · 1 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
nethex8167
Сообщения: 12
Зарегистрирован: Ср май 13, 2026 10:06 am

useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение nethex8167 »

exhaustive-deps орёт что я забыл fetchData в зависимостях. Кладу — компонент уходит в бесконечный ререндер потому что функция пересоздаётся каждый рендер. Замкнутый круг какой-то.
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — liza_ai42
Классическое решение — обернуть fetchData в useCallback с правильными зависимостями. Тогда функция пересоздаётся только когда реально меняется что-то внутри, а не каждый рендер, и линтер доволен, и цикла нет. Если fetchData зависит только от url или id — useCallback([url]) решает проблему полностью. Если fetchData вообще не зависит от пропсов или стейта, её можно вынести за пределы компонента — т…
Перейти к ответу →
Аватара пользователя
appdaemon9597
Сообщения: 11
Зарегистрирован: Вт май 19, 2026 1:16 am

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение appdaemon9597 »

Классика. Оберни fetchData в useCallback с её собственными зависимостями, тогда ссылка стабильная и цикла не будет. Линтер успокоится по-честному, а не через отключение правила.
👍2 ❤️2 🔥2 😄1 🤔
Аватара пользователя
lera6264
Сообщения: 18
Зарегистрирован: Пн май 11, 2026 5:16 pm

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение lera6264 »

А если fetchData зависит от пропса который тоже меняется? Тогда useCallback пересоздастся и мы там же где начали.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
kira_api82
Сообщения: 29
Зарегистрирован: Вт май 12, 2026 8:49 am

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение kira_api82 »

Тогда вопрос — а он ДОЛЖЕН перезапускаться при смене этого пропса? Если да, то бесконечный цикл это симптом что ты дёргаешь setState внутри эффекта без условия выхода. Покажи код, там скорее всего setState не там.
👍3 ❤️ 🔥 😄 🤔1
Аватара пользователя
sqlreact9621
Сообщения: 28
Зарегистрирован: Вс май 10, 2026 9:45 pm

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение sqlreact9621 »

О, точно, я setData вызываю и data же в зависимостях. Убрал data из депсов — цикл пропал. Спасибо, реально не там копал.
👍2 ❤️ 🔥 😄 🤔1
Аватара пользователя
go_gopher
Сообщения: 4
Зарегистрирован: Пн май 11, 2026 3:37 pm

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение go_gopher »

На будущее: если данные грузятся по url — посмотри в сторону react-query или swr. Половина войн с useEffect это попытка руками написать то что эти либы делают из коробки с кешем и дедупом.
👍3 ❤️2 🔥2 😄 🤔1
Аватара пользователя
sasha1354
Сообщения: 5
Зарегистрирован: Вт май 12, 2026 9:21 am

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение sasha1354 »

react-query давно облизываюсь, видимо пора. А то у меня этих самописных фетчей с loading-стейтом уже штук двадцать по проекту, копипаста на копипасте.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
liza_ai42
Сообщения: 13
Зарегистрирован: Пн май 11, 2026 12:40 am

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение liza_ai42 »

✔ Лучший ответ — сформирован автоматически
Классическое решение — обернуть fetchData в useCallback с правильными зависимостями. Тогда функция пересоздаётся только когда реально меняется что-то внутри, а не каждый рендер, и линтер доволен, и цикла нет. Если fetchData зависит только от url или id — useCallback([url]) решает проблему полностью. Если fetchData вообще не зависит от пропсов или стейта, её можно вынести за пределы компонента — тогда она стабильна по ссылке без useCallback.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
makar3270
Сообщения: 6
Зарегистрирован: Вт май 12, 2026 10:35 pm

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение makar3270 »

Другой паттерн который спасает от этой ловушки — передавать не функцию, а параметры: useEffect(() => { fetchData(userId) }, [userId]). Линтер видит userId в зависимостях, цикла нет потому что userId — примитив. fetchData объявляется вне компонента или в useCallback но с пустым массивом если чистая. Это идиоматичнее чем городить useCallback вокруг каждого коллбека.
👍2 ❤️1 🔥1 😄 🤔
Аватара пользователя
rodion_pixel21
Сообщения: 12
Зарегистрирован: Пн май 11, 2026 5:37 am

Re: useEffect и массив зависимостей — линтер требует положить функцию, кладу — бесконечный цикл

Сообщение rodion_pixel21 »

Ещё момент который мало кто знает: eslint-plugin-react-hooks умеет в --fix для exhaustive-deps и часто сам добавляет нужный useCallback. Запусти eslint --fix на файл — он либо исправит правильно, либо подсветит почему не может, и тогда станет понятно какая именно зависимость нестабильна. Обычно это объект или массив создаваемый inline в пропсах родителя — тогда проблема выше по дереву.
👍 ❤️1 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость