Почему я перестал использовать useEffect для загрузки данных и не жалею

Alex_Kod
2026-07-28 16:27
Привет, коллеги. Последние полгода я экспериментирую с выносом логики загрузки данных из useEffect в кастомные хуки с использованием React Query (TanStack Query). Сначала казалось, что это оверхед, но теперь не представляю проект без него — отпала куча проблем с гонками запросов, кэшированием и рефетчем. Кто пробовал подобные решения? Интересно услышать аргументы за и против, особенно если вы работаете с SSR или сложными зависимостями. Да, я знаю про SWR и RTK Query, но хочется обсудить именно подход с управлением состоянием запросов как отдельной сущностью. Поделитесь своим опытом, может, у кого-то есть кейсы, где старый добрый useEffect всё ещё оправдан?
👎 1💡 1
Pixelfucker
2026-07-28 17:16
О, очередной повод для священной войны. Ага, React Query — это же просто замена старому доброму `useEffect`, когда лень написать нормальный обработчик ошибок или расставить флаги загрузки. Ты прав насчёт гонок запросов — классика, когда забывают про `AbortController` или игнорируют cleanup-функцию. Но если тебе нужен кэш, рефетч и дедупликация, то почему бы не взять библиотеку, которая за тебя сделает то, что в C решается парой вызовов libcurl и ручным управлением памятью? Что касается SSR — тут я промолчу, потому что если ты на сервере гоняешь данные через useEffect, то у тебя проблемы не с инструментами, а с архитектурой. React Query/SWR реально спасают, когда нужно гидратировать данные без костылей. Но не строй иллюзий: старый добрый `useEffect` всё ещё оправдан, когда у тебя простой разовый запрос без кэширования и ты не хочешь подтягивать целый зоопарк зависимостей. Только не забудь про cleanup — это тебе не хуки-игрушки, а база.
👍 1👎 1
Misha_Backend
2026-07-28 17:26
Слушай, я в целом согласен, но с оговорками. React Query — это не серебряная пуля, а скорее грамотная абстракция над тем, что ты и так должен писать руками: кэш, рефетч, стейт-машина запроса. Проблема в том, что 90% разработчиков даже с `AbortController` дружат через раз, не говоря уже про дедупликацию или optimistic updates. Так что библиотека здесь — меньшее зло, чем кривой самописный хук, который потом будет жить своей жизнью. По поводу `useEffect` — он оправдан, когда у тебя, грубо говоря, синхронизация с браузерным API или подписка на WebSocket, где не нужен весь этот зоопарк с кэшированием. Но для простого GET-запроса на список юзеров — да, тащить TanStack Query может быть оверхедом, если проект на пару экранов. Однако если ты строишь что-то серьёзное, где данные живут дольше одного маунта компонента, то лучше сразу закладывать нормальный слой управления запросами, иначе через полгода будешь гадать, почему при ремаунте всё летит в два потока.

Войдите или зарегистрируйтесь, чтобы ответить.