Ешьте React-компоненты по кусочкам
На одном проекте у нас был разработчик, который упаковывал всё в один файл. Слайдер? Там же стрелки, индикаторы, логика автопрокрутки и дата-фетч. Попап? Значит, все хендлеры, модальные слои, порталы и валидация должны жить рядом. Файл разрастался до тысяч строк, ревью превращалось в пытку, а любой новый человек говорил: «Бипец, работать невозможно».
React позволяет держать всё в одном компоненте, но это не значит, что стоит так делать. Разбейте сложный UI на маленькие части — и вы вздохнёте свободно.
Когда в компоненте десятки состояний, эффектов и колбэков, становится сложно понять, какая часть отвечает за что. Ревьюер пропускает важные детали, просто потому что глаза замылились.
Одно изменение в глубине компонента легко ломает соседнюю логику. Нет изоляции — нет уверенности.
Новому разработчику нужно изучить тысячу строк, чтобы поправить мелочь. Он не понимает, где заканчивается бизнес-логика и начинается рендер.
Slider, SliderArrow, SliderBullets, useSliderAutoplay, useSliderKeyboard.components/Slider заведите index.ts, Slider.tsx, SliderArrow.tsx, SliderBullets.tsx, hooks/useSliderAutoplay.ts.useSomething. UI оставляем чистым.components/
Slider/
index.ts
Slider.tsx
SliderControls.tsx
SliderDots.tsx
hooks/
useSliderAutoplay.ts
useSliderNavigation.ts
utils/
getNextSlide.ts
getPrevSlide.ts
index.ts экспортирует публичный интерфейс, а внутренние детали остаются спрятанными. Команда видит аккуратный API и не боится открыть папку.
Большие компоненты тормозят развитие продукта. Как только видите «много всего в одном файле» — дробите: выносите UI в подкомпоненты, логику в хуки, а публичный интерфейс собирайте через index. Команда станет быстрее, ревью — приятнее, а поддержка перестанет быть болью.