React Router v7: Маршрутизація в SPA
React Router v7: Маршрутизація в SPA
🔗 Офіційний референс: React Router v7 Documentation (Library Mode)
🎯 Про цей розділ
React Router v7 — стандартна бібліотека клієнтської маршрутизації для React-застосунків. Цей розділ курсу охоплює використання React Router виключно як бібліотеки (Library Mode) для створення SPA-застосунків без серверного рендерингу.
Ми вивчимо повний стек можливостей: від базової конфігурації до складних архітектурних патернів, типобезпеки TypeScript та продакшн-готових практик.
📚 Структура розділу
- Встановлення та базова конфігурація — два синтаксиси (JSX + Data Router API)
- Вкладені маршрути та Outlet
- Динамічні маршрути та параметри
- Навігація та корисні хуки
- Обробка помилок та 404
- 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 Mode | Full-stack фреймворк (аналог Next.js/Remix) | SSR, Server Loaders, Server Actions, автоматичний code-splitting |
Навігація розділом
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).
Практичні проєкти модуля
📁 Еталонний проєкт
Повнофункціональний референсний проєкт на React Router v7:
- Глобальний Layout з навігацією (
<Outlet>) - Динамічні маршрути (
/products/:id) - Пошукові параметри (
useSearchParams) - Захищені маршрути (
ProtectedRoute,useAuth) - Вкладена панель Dashboard
- ErrorBoundary та сторінка 404
📁 Чистий шаблон
Мінімалістичний шаблон для швидкого старту:
- 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 v7 | TanStack Router | Wouter |
|---|---|---|---|
| Популярність | Стандарт де-факто | Швидко зростає | Нішова |
| Розмір бандлу | ~10 KB | ~12 KB | ~1.5 KB |
| TypeScript | Добра підтримка | Відмінна (type-safe) | Базова |
| API | Компоненти + хуки | Об'єктна конфігурація | Мінімалістичний |
| Data Loading | Ручний (fetch у компонентах) | Вбудований | Відсутній |
| Framework Mode | Так (SSR, RSC) | Ні | Ні |
- Найбільша екосистема та комьюніті.
- Велика кількість навчальних матеріалів та прикладів.
- Плавна міграція з попередніх версій (v5 → v6 → v7).
- Можливість еволюціонувати у full-stack фреймворк (Framework Mode) за потреби.
- Потреба у type-safe маршрутизації з автоматичним виведенням типів.
- Вбудоване завантаження даних із підтримкою Suspense.
- Проєкт вже використовує інші бібліотеки TanStack (Query, Table).
- Мікросервіси або мікрофронтенди з жорстким обмеженням бандлу.
- Дуже прості застосунки з 3–5 маршрутами.
Підсумок
✅ Після вивчення розділу ви зможете
- Налаштовувати маршрутизацію для SPA-застосунків будь-якої складності.
- Створювати вкладені макети з спільними компонентами.
- Працювати з динамічними параметрами та пошуковими параметрами URL.
- Реалізовувати програмну навігацію та активні посилання.
- Обробляти помилки рендерингу та створювати користувацькі сторінки 404.
- Забезпечувати типобезпеку маршрутів через TypeScript.
🎯 Наступні кроки
Після опанування React Router рекомендується вивчити:
- Axios — HTTP-клієнт для завантаження даних з API.
- Redux Toolkit / Zustand — управління глобальним станом.
- TanStack Query / RTK Query — кешування та синхронізація серверного стану.
- React Hook Form + Zod — валідація форм та обробка вводу.
Кастомні хуки: повторне використання та композиція реактивної логіки
Створення власних хуків для витягування повторюваної логіки: useOnlineStatus, useFetch, useLocalStorage, useDebounce. Правила композиції хуків, типізація TypeScript та архітектурні патерни для масштабованих застосунків.
Встановлення та базова конфігурація React Router v7
Встановлення React Router v7 як бібліотеки для SPA-маршрутизації, налаштування BrowserRouter, перші маршрути через Routes та Route, розуміння декларативного підходу до навігації.