React Router v7: Маршрутизація в SPA

Повний курс клієнтської маршрутизації через React Router v7 у режимі бібліотеки: від базової конфігурації до складних вкладених маршрутів, динамічних параметрів, програмної навігації та обробки помилок.

React Router v7: Маршрутизація в SPA

🔗 Офіційний референс: React Router v7 Documentation (Library Mode)

🎯 Про цей розділ

React Router v7 — стандартна бібліотека клієнтської маршрутизації для React-застосунків. Цей розділ курсу охоплює використання React Router виключно як бібліотеки (Library Mode) для створення SPA-застосунків без серверного рендерингу.

Ми вивчимо повний стек можливостей: від базової конфігурації до складних архітектурних патернів, типобезпеки TypeScript та продакшн-готових практик.

📚 Структура розділу

  1. Встановлення та базова конфігурація — два синтаксиси (JSX + Data Router API)
  2. Вкладені маршрути та Outlet
  3. Динамічні маршрути та параметри
  4. Навігація та корисні хуки
  5. Обробка помилок та 404
  6. Data Router API — повний довідник об'єктного синтаксису

🔑 Передумови

  • Впевнене володіння React: компоненти, хуки, стан, ефекти.
  • Базове розуміння TypeScript: типи, інтерфейси, дженерики.
  • Знання HTML5 History API (не обов'язково, але корисно).
  • Встановлений Node.js ≥ 18 та менеджер пакетів (npm/pnpm).

Чому React Router v7?

Односторінкові застосунки (SPA) відображають різний контент залежно від URL без повного перезавантаження сторінки. React Router синхронізує URL із компонентами, надаючи:

Декларативну маршрутизацію

Замість імперативного window.location.href = "/about" описуєте відображення URL на компоненти через JSX:

<Routes>
  <Route path="/" element={<HomePage />} />
  <Route path="/about" element={<AboutPage />} />
</Routes>

Вкладені маршрути

Ієрархічна структура маршрутів із спільними Layout-компонентами:

<Route path="/dashboard" element={<DashboardLayout />}>
  <Route path="profile" element={<Profile />} />
  <Route path="settings" element={<Settings />} />
</Route>

Динамічні параметри

Один маршрут для тисяч сторінок:

<Route path="/users/:userId" element={<UserProfile />} />

Інтеграція з History API

Підтримка кнопок "Назад" та "Вперед" браузера, збереження стану навігації, програмні переходи.


Режим бібліотеки vs режим фреймворку

React Router v7 підтримує два режими:

РежимПризначенняМожливості
Library Mode (наш фокус)Клієнтська маршрутизація для існуючих React-застосунківНавігація, параметри URL, вкладені маршрути, ErrorBoundary
Framework ModeFull-stack фреймворк (аналог Next.js/Remix)SSR, Server Loaders, Server Actions, автоматичний code-splitting
У цьому курсі ми вивчаємо виключно Library Mode — клієнтську бібліотеку маршрутизації без серверних можливостей. Це найпоширеніший сценарій для SPA-застосунків із незалежним бекенд-API.

Навігація розділом

01. Встановлення та базова конфігурація

  • Встановлення React Router v7 через npm install react-router.
  • Обгортання застосунку у <BrowserRouter>.
  • Визначення перших маршрутів через <Routes> та <Route>.
  • Навігація через компонент <Link>.
  • Альтернатива: HashRouter для статичного хостингу.

02. Вкладені маршрути та Outlet

  • Організація ієрархічної структури маршрутів.
  • Використання <Outlet> для рендерингу дочірніх компонентів.
  • Layout Routes для спільних обгорток без впливу на URL.
  • Index Routes як сторінки за замовчуванням.
  • Багаторівнева вкладеність для складних застосунків.

03. Динамічні маршрути та параметри

  • Створення динамічних сегментів через синтаксис :paramName.
  • Витягування значень параметрів через useParams().
  • Типізація параметрів у TypeScript.
  • Необов'язкові сегменти через суфікс ?.
  • Wildcard-маршрути через * для вкладених шляхів.

04. Навігація та корисні хуки

  • Програмна навігація через useNavigate.
  • Активні посилання через <NavLink> із класом .active.
  • Робота з пошуковими параметрами через useSearchParams.
  • Відстеження локації через useLocation.
  • Передача стану через navigate(path, { state }).

05. Обробка помилок та 404

  • Створення сторінок 404 через catch-all маршрут path="*".
  • Вкладені 404 для контекстних повідомлень.
  • Обробка помилок рендерингу через ErrorBoundary.
  • Локальні ErrorBoundary для ізоляції помилок.
  • Інтеграція логування помилок із Sentry / LogRocket.

06. Data Router API: альтернативний синтаксис

  • Створення маршрутів через createBrowserRouter та масив об'єктів.
  • Порівняння JSX-синтаксису та Data Router API.
  • Вбудована обробка помилок через errorElement.
  • Централізована конфігурація для великих проєктів.
  • Типізація маршрутів через TypeScript.
  • Переваги для data fetching (loaders, actions).

Практичні проєкти модуля

📁 Еталонний проєкт

01-react-router-sample

Повнофункціональний референсний проєкт на React Router v7:

  • Глобальний Layout з навігацією (<Outlet>)
  • Динамічні маршрути (/products/:id)
  • Пошукові параметри (useSearchParams)
  • Захищені маршрути (ProtectedRoute, useAuth)
  • Вкладена панель Dashboard
  • ErrorBoundary та сторінка 404

📁 Чистий шаблон

02-react-router-sample-clean

Мінімалістичний шаблон для швидкого старту:

  • Vite 7 + React Router 7.9
  • Базова конфігурація маршрутів
  • Без сторонніх компіляторних плагінів
  • Готовий для самостійних завдань

Ключові концепції та патерни

Декларативне відображення URL на компоненти

React Router не використовує імперативні виклики (router.navigate()). Замість цього визначаєте дерево маршрутів декларативно через JSX, а React Router автоматично обирає відповідний компонент на основі поточного URL.

Односпрямований потік даних

URL → Маршрут → Компонент → UI. Зміна URL викликає ререндер відповідних компонентів, але компоненти не змінюють URL напряму — вони використовують <Link> або useNavigate() для делегування навігації React Router.

Композиція через вкладеність

Складні макети будуються через вкладені маршрути замість ручного рендерингу умовних компонентів. Кожен рівень вкладеності додає свій сегмент до URL та свій Layout до UI.

Типобезпека через TypeScript

Всі хуки React Router підтримують дженерики для типізації параметрів, стану локації та пошукових параметрів. Це забезпечує автодоповнення та перевірку типів на етапі компіляції.


Порівняння з альтернативами

КритерійReact Router v7TanStack RouterWouter
ПопулярністьСтандарт де-фактоШвидко зростаєНішова
Розмір бандлу~10 KB~12 KB~1.5 KB
TypeScriptДобра підтримкаВідмінна (type-safe)Базова
APIКомпоненти + хукиОб'єктна конфігураціяМінімалістичний
Data LoadingРучний (fetch у компонентах)ВбудованийВідсутній
Framework ModeТак (SSR, RSC)НіНі
Коли обирати React Router:
  • Найбільша екосистема та комьюніті.
  • Велика кількість навчальних матеріалів та прикладів.
  • Плавна міграція з попередніх версій (v5 → v6 → v7).
  • Можливість еволюціонувати у full-stack фреймворк (Framework Mode) за потреби.
Коли розглянути TanStack Router:
  • Потреба у type-safe маршрутизації з автоматичним виведенням типів.
  • Вбудоване завантаження даних із підтримкою Suspense.
  • Проєкт вже використовує інші бібліотеки TanStack (Query, Table).
Коли використовувати Wouter:
  • Мікросервіси або мікрофронтенди з жорстким обмеженням бандлу.
  • Дуже прості застосунки з 3–5 маршрутами.

Підсумок

✅ Після вивчення розділу ви зможете

  • Налаштовувати маршрутизацію для SPA-застосунків будь-якої складності.
  • Створювати вкладені макети з спільними компонентами.
  • Працювати з динамічними параметрами та пошуковими параметрами URL.
  • Реалізовувати програмну навігацію та активні посилання.
  • Обробляти помилки рендерингу та створювати користувацькі сторінки 404.
  • Забезпечувати типобезпеку маршрутів через TypeScript.

🎯 Наступні кроки

Після опанування React Router рекомендується вивчити:

  • Axios — HTTP-клієнт для завантаження даних з API.
  • Redux Toolkit / Zustand — управління глобальним станом.
  • TanStack Query / RTK Query — кешування та синхронізація серверного стану.
  • React Hook Form + Zod — валідація форм та обробка вводу.
Copyright © 2026