React Router — это библиотека для управления маршрутизацией в приложениях на React. Она позволяет создавать динамическую навигацию, связывать URL с компонентами и управлять состоянием приложения через адресную строку браузера. В React Router маршрутизация рассматривается как единственный источник истины, где состояние интерфейса синхронизируется с URL.
Ключевой принцип: состояние интерфейса должно полностью отражаться в маршрутах. Любое изменение, которое не синхронизировано с URL, считается потенциальной причиной ошибок и трудной отладки.
Оборачивает приложение и обеспечивает работу истории браузера. Использует HTML5 History API для управления адресной строкой.
import { BrowserRouter } from 'react-router-dom';
function App() {
return (
{/* маршруты */}
);
}
и
Компонент содержит набор
, которые определяют соответствие между URL и
компонентом.
import { Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
function AppRoutes() {
return (
} />
} />
);
}
Особенности:
path — путь маршрута, поддерживает динамические
параметры.element — компонент, который рендерится при совпадении
пути. выбирает первый совпавший
маршрут, поэтому порядок маршрутов важен.Для передачи параметров в URL используются двоеточия:
} />
В компоненте UserProfile параметры можно получить через
хук useParams:
import { useParams } from 'react-router-dom';
function UserProfile() {
const { userId } = useParams();
return Профиль пользователя: {userId};
}
Особенности динамических маршрутов:
*) для вложенных маршрутов.Вложенные маршруты позволяют строить иерархическую структуру страниц.
Родительский компонент рендерит дочерние маршруты с помощью
:
import { Outlet } from 'react-router-dom';
function Dashboard() {
return (
Панель управления
);
}
}>
} />
} />
Особенности вложенности:
определяет, где рендерятся дочерние
маршруты.Для перехода между маршрутами используется
или хук useNavigate:
import { Link, useNavigate } from 'react-router-dom';
function Menu() {
const navigate = useNavigate();
return (
Главная
);
}
Различия:
генерирует ссылку и
работает как стандартная навигация.useNavigate позволяет программно изменять маршрут,
передавать состояние и управлять историей (replace,
push).React Router использует URL как источник истины. Любое состояние, которое должно быть сохранено в истории браузера, должно отражаться в маршрутах:
navigate('/products?page=2&filter=popular');
Состояние можно получить через useLocation:
import { useLocation } from 'react-router-dom';
function Products() {
const location = useLocation();
console.log(location.search); // ?page=2&filter=popular
}
Рекомендации по состоянию маршрута:
Для маршрутов, доступных только авторизованным пользователям, применяют концепцию Protected Routes:
function ProtectedRoute({ isAuth, children }) {
if (!isAuth) {
return ;
}
return children;
}
} />
Особенности:
выполняет редирект без перезагрузки
страницы.replace предотвращает попадание
защищённого маршрута в историю браузера.Для оптимизации крупных приложений используется динамический импорт
компонентов через React.lazy и Suspense:
import { Suspense, lazy } from 'react';
const About = lazy(() => import('./About'));
Загрузка... Преимущества:
React Router поддерживает отлавливание несуществующих маршрутов через
path="*":
} />
Рекомендации:
.useNavigate и useLocation позволяют
полностью управлять историей:
navigate(path, { replace: true }) — замена текущего
маршрута.navigate(-1) — переход на предыдущую страницу.navigate(1) — переход на следующую страницу.Совет: синхронизация состояния UI с историей браузера делает приложение предсказуемым и легко тестируемым.