Прекратите это в React-проектах немедленно

Спустя месяцы над разросшимся React-приложением я осознал: сложность — не от скупердяйства, а от наваливания 'лучших практик'. Вот что я бросил — и почему всё стало чище и шустрее.

Чистка в React: Пять переборных привычек, которые я вырезал из кодовой базы — theAIcatchup

Key Takeaways

  • Избавьтесь от Redux для серверного состояния; SWR или React Query сократят бойлерплейт на 90%.
  • Забудьте цепочки useEffect: редьюсеры или query-либы для компонуемых сайд-эффектов.
  • Будущее React — за простотой: серверные компоненты перевернут управление стейтом.

Пот на лбу в тихом сан-франциском коворкинге, удаляю 200 строк Redux-бойлерплейта для простого API-вызова — и приложение словно вздохнуло свободнее.

То, что я перестал делать в React-проектах, перевернуло всё. Не добавлять новые хуки и паттерны. Нет. Вырезать. Без жалости.

Открытие? «Поддерживаемый React-код — это не про следование лучшим практикам. Это про умение вовремя прекратить их использовать.»

Поддерживаемый React-код — это не про следование лучшим практикам. Это про умение вовремя прекратить их использовать.

Хук удался. И чёрт возьми, зацепил.

Почему Redux для серверного состояния меня добивал

Представьте: каждый API-запрос порождает чудовище. Три типа действий. Async thunk. Кейсы редьюсера. Селекторы. useDispatch и useSelector — ад в компонентах. 200+ строк на список кампаний.

Вот ‘до’, прямо из окопов:

// 3 action types, 1 action creator, 1 reducer, 2 selectors...
const FETCH_CAMPAIGNS_REQUEST = "FETCH_CAMPAIGNS_REQUEST";
// ... (понятно)

Подключение? useEffect с диспатчем при смене страницы. Состояния загрузки разбросаны. Ошибки зарыты.

Затем SWR. 15 строк. Один хук. Mutate при обновлениях. Готов к Suspense. Кэш? Автомат. Stale-while-revalidate? Вшит.

const { data: campaigns, error, isLoading } = useSWR('/campaigns?page=' + page);

Плюсы? Логика фетча исчезла из компонентов. Размер бандла минус 15%. Отладка? Не проблема — девтулы SWR всё показывают.

Мой уникальный взгляд: Redux для серверного состояния — эхо jQuery в раннем вебе. Все кололи им любые гвозди, пока fetch() и либы не сказали ‘хватит’. Следующий сдвиг в React? Server Components взорвут большинство клиентских state-машин.

Стоит ли ещё цеплять useEffect?

Цепочки useEffect. По пять на компонент. Один на фетч. Один на optimistic updates. Один на подписки. Cleanup? Кошмары.

Остановил на корню. Заменил на паттерн с одним редьюсером через useReducer + Zustand (миниатюрный, без провайдеров). Или круче: TanStack Query для запросов/мутаций.

Почему? Эффекты не компонуются. Дерутся — stale closures, бесконечные циклы при ошибках в deps. Редьюсер централизует. Один источник истины.

В моей платформе модуль разговоров с 8 эффектов сократился до 2 Query-хуков. Ререндеры вдвое меньше. Race conditions? Исчезли.

Реакт-доки продвигают эффекты как ‘короля сайд-эффектов’, но это мышление 2018-го. Архитектура переходит к запросам как к полноценным объектам.

Короткий абзац. Жёсткая правда.

Prop Drilling: Мёртв с пелёнок

Пропсы на восемь уровней вглубь. UserId из App в тултип Footer. Каждый рефакторинг? Каскад пропсов.

Прикончил. Context? Да, но экономно — только орг-уровень. Компоненты? Хукают из лёгкого стора.

Jotai или Valtio. На атомах. Без контекст-провайдеров повсюду. Подписка точечно.

const userId = useAtom(userAtom);

Многоорг-права? Атом на орг. Масштабируется. Никакого ‘Context hell’.

Кастомные хуки для банальщины

useFetchUser. usePaginateList. useOptimisticUpdate. Колесо заново.

Забил. Либы рулят: React Query/SWR для данных. Framer Motion для анимаций. Headless UI для… headless.

Моя кодовая база? Хуков с 45 до 12. Все боевые. Багов? Почти ноль.

Корпо-хайп: ‘хуки чинят композицию’ от Facebook игнорирует взрыв экосистемы либ — и не зря.

Inline-стили и Emotion-блото

CSS-in-JS вздутие. Emotion-кэши. Бандл раздувается.

Перешёл на Tailwind + CSS-модули. Utility-классы. Ноль рантайма.

Загрузка приложения? На мобиле скорость +40%. С tree-shaking’ом. Теминг? CSS vars.

Почему это важно для React-разработчиков в 2024-м?

React перерастает фазу ‘всё вперёд’. Хуки дали мощь, но плодят овер-инжиниринг. Остановить это? Обрезка для роста.

Метрики моего проекта: строк кода минус 65%. Онбординг новичков? Дни, не недели. Фикс багов в 3 раза быстрее.

Прогноз: К 2025-му React Server Components сделают клиентский стейт реликвией. Инструменты вроде SWR эволюционируют в full-stack фетчеры. Redux? Легаси для редких глобальных синков.

Сомневаетесь? Протестируй

Elena Vasquez
Written by

Senior editor and generalist covering the biggest stories with a sharp, skeptical eye.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by Dev.to