Компоненты и пропсы

Тема дорожной карты · Frontend разработчик

Компоненты React — это фундаментальные строительные блоки любого React-приложения: самодостаточные функции или классы, принимающие типизированные props, управляющие собственным состоянием и возвращающие JSX, описывающий интерфейс. Современная разработка на React использует исключительно функциональные компоненты с хуками вместо классовых компонентов, обеспечивая более чистую композицию и упрощённое управление жизненным циклом через useEffect. Компоненты общаются вниз через типизированные props (определяемые как TypeScript-интерфейсы в .tsx-файлах) и вверх через callback-пропсы, тогда как соседние компоненты совместно используют состояние через его подъём к общему родителю. Глубокое понимание компонентов React — включая мемоизацию с React.memo, проп key для согласования списков и различие между контролируемыми и неконтролируемыми компонентами — необходимо для создания производительных приложений с Next.js, Remix или Astro islands.

Как это работает

Компоненты и пропсы моделирует UI как дерево компонентов — JavaScript-функций, принимающих props и возвращающих JSX. State в useState-хуках; сайд-эффекты (fetch, subscribe) — в useEffect. На изменение state React ререндерит затронутый компонент, сравнивает virtual DOM, применяет минимальные DOM-обновления. Другие крупные фреймворки: Vue (template-based, реактивность встроена), Svelte (compile-time реактивность, меньше бандлы), Solid (signal-based, fine-grained), Angular (opinionated full framework). Выбирайте по знаниям команды.

Когда применять

React — самый большой хайринг + экосистема; Vue — "легче учить, есть шаблоны"; Svelte/Solid — самые маленькие бандлы + fine-grained реактивность; Angular — enterprise + full framework. Читайте официальную доку того, что выбрали; second-hand туториалы отстают от фичей. Не смешивайте фреймворки в одном приложении.

Типичные ошибки

Ловушки Компоненты и пропсы: useEffect для того, что React делает сам (computed values, зеркалирование props); обновление state в render (infinite loop); огромные компоненты вместо декомпозиции; непонимание key prop в списках (порча при reorder); over-fetching на каждый render. Гайд React "You Might Not Need an Effect" убирает половину useEffect в реальных кодовых базах.

Связанные понятия

Полезные ресурсы