React Router
Тема дорожной карты · Frontend разработчик
React Router — стандартная библиотека клиентской маршрутизации для React-приложений, обеспечивающая декларативную навигацию, вложенные макеты и динамическое сопоставление URL без полной перезагрузки страницы. Версия 6 ввела API createBrowserRouter с паттерном data router, где каждый маршрут может объявлять loader для получения данных и action для обработки мутаций, перенося серверные паттерны роутинга на клиент. Ключевые компоненты: <Routes>, <Route>, <Link> и <NavLink>, а хуки useParams, useNavigate, useLocation и useLoaderData обеспечивают программный доступ к состоянию маршрутизации внутри компонентов. React Router лежит в основе модели маршрутизации Remix, и понимание его структуры вложенных маршрутов — где дочерние маршруты рендерятся внутри родительских компонентов <Outlet /> — необходимо для построения сложных доступных SPA с Next.js-подобными макетами в чистых React-проектах.
Как это работает
React Router моделирует 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 туториалы отстают от фичей. Не смешивайте фреймворки в одном приложении.
Типичные ошибки
Ловушки React Router: useEffect для того, что React делает сам (computed values, зеркалирование props); обновление state в render (infinite loop); огромные компоненты вместо декомпозиции; непонимание key prop в списках (порча при reorder); over-fetching на каждый render. Гайд React "You Might Not Need an Effect" убирает половину useEffect в реальных кодовых базах.