React Router — это библиотека для управления навигацией в приложениях на React. Она позволяет организовать маршруты, связывать URL с компонентами и управлять состоянием истории браузера. Основной концепт заключается в том, что каждый маршрут соответствует компоненту React, который рендерится при совпадении текущего URL с определённым шаблоном.
BrowserRouter и
HashRouter — это два базовых типа
роутеров. BrowserRouter использует HTML5 History API,
обеспечивая чистые URL, без символа #.
HashRouter подходит для старых браузеров или статических
сайтов, где URL содержит хеш (#) для имитации
маршрутов.
Routes — контейнер для всех маршрутов
приложения. Каждый маршрут описывается с помощью компонента
Route, где указываются path
(путь) и element (компонент, который рендерится).
Пример:
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
} />
} />
Маршруты могут содержать динамические параметры, которые доступны
компоненту через useParams.
} />
В компоненте:
import { useParams } from 'react-router-dom';
function UserProfile() {
const { id } = useParams();
return Пользователь с ID: {id};
}
Также можно передавать дополнительные данные через
state при навигации с использованием
useNavigate.
Link и
NavLink используются для переходов между
страницами. NavLink предоставляет возможность добавлять
активные стили для текущего маршрута.
О нас
isActive ? 'active' : ''}>О нас
Для программной навигации используется
useNavigate:
import { useNavigate } from 'react-router-dom';
const navigate = useNavigate();
navigate('/home'); // Переход к /home
React Router поддерживает вложенные маршруты, что
позволяет создавать сложную структуру страниц. Родительский маршрут
рендерит дочерний с помощью Outlet.
}>
} />
} />
В компоненте Dashboard:
import { Outlet } from 'react-router-dom';
function Dashboard() {
return (
Панель управления
);
}
Для реализации аутентификации часто создают ProtectedRoute, который проверяет состояние пользователя:
function ProtectedRoute({ isAuth, children }) {
return isAuth ? children : ;
}
Использование:
} />
React Router легко интегрируется с ленивой загрузкой компонентов
через React.lazy и Suspense:
import { Suspense, lazy } from 'react';
const Home = lazy(() => import('./Home'));
Загрузка... Это повышает производительность, позволяя загружать код по мере необходимости.
Современные Meta-фреймворки, такие как Next.js или Remix, используют маршрутизацию на основе файловой структуры. React Router может интегрироваться с ними для создания более динамических и гибких маршрутов.
loader или
fetch в серверных компонентах). React Router поддерживает
асинхронные загрузчики данных через новые хук-ориентированные API
(useLoaderData, useActionData).Outlet.React Router не предоставляет встроенные инструменты для управления
(title, meta-теги), но в Meta-фреймворках это
интегрировано через API страницы или специальные компоненты:
import { useEffect } from 'react';
function About() {
useEffect(() => {
document.title = 'О нас';
document.querySelector('meta[name="description"]').content = 'Описание страницы о нас';
}, []);
return Контент страницы;
}
В Next.js и Remix такие операции выполняются декларативно через
специальные функции (getServerSideProps,
loader, ), что упрощает
SEO-оптимизацию.
React Router обеспечивает полный контроль над историей через
useNavigate и useLocation. Meta-фреймворки
интегрируют это с SSR, позволяя синхронизировать URL на клиенте и
сервере, поддерживая корректное состояние при возврате назад и навигации
между страницами.