React Router — это библиотека для организации навигации в приложениях
на React. Основная концепция заключается в том, что каждая страница
приложения ассоциируется с определённым маршрутом. Компоненты
BrowserRouter и Routes формируют основу
маршрутизации.
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
function App() {
return (
} />
} />
);
}
Здесь BrowserRouter создаёт контекст маршрутизации, а
Routes содержит набор Route, которые
определяют путь и компонент, отображаемый по этому пути.
Для передачи параметров через URL используется синтаксис
:paramName. Эти параметры можно извлекать с помощью хука
useParams.
import { useParams } from 'react-router-dom';
function UserProfile() {
const { userId } = useParams();
return Профиль пользователя: {userId};
}
Маршрут с динамическим сегментом задаётся так:
} />
Это позволяет создавать универсальные страницы для различных пользователей, товаров или категорий.
Вложенные маршруты позволяют строить иерархию страниц и компонентов.
Для этого используется элемент Outlet.
import { Outlet, Link } from 'react-router-dom';
function Dashboard() {
return (
);
}
}>
} />
} />
Outlet отображает дочерний маршрут, обеспечивая гибкую
структуру страницы.
Для управления переходами внутри приложения используется хук
useNavigate.
import { useNavigate } from 'react-router-dom';
function Login() {
const navigate = useNavigate();
function handleLogin() {
// Логика аутентификации
navigate('/dashboard');
}
return ;
}
navigate поддерживает как абсолютные, так и
относительные пути, а также возможность замены текущего состояния
истории (replace: true).
Для перенаправления на другой маршрут применяется компонент
Navigate. Часто используется для защиты маршрутов.
import { Navigate } from 'react-router-dom';
function ProtectedRoute({ isAuthenticated, children }) {
if (!isAuthenticated) {
return ;
}
return children;
}
Комбинируя Navigate с проверкой состояния
аутентификации, можно реализовать приватные страницы.
Query-параметры позволяют передавать данные через URL без создания отдельных маршрутов.
import { useSearchParams } from 'react-router-dom';
function SearchPage() {
const [searchParams, setSearchParams] = useSearchParams();
const query = searchParams.get('q');
return Результаты поиска для: {query};
}
Для изменения query-параметров используется метод
setSearchParams, что удобно для фильтров и сортировок.
React Router поддерживает ленивую загрузку компонентов через
React.lazy и Suspense.
import { lazy, Suspense } from 'react';
const About = lazy(() => import('./About'));
Загрузка... Это уменьшает первоначальный размер бандла и ускоряет загрузку приложения.
useLocation — получение текущего пути и состояния.useMatch — проверка соответствия текущего пути
маршруту.useNavigationType — определение типа последнего
навигационного события (POP, PUSH,
REPLACE).import { useLocation } from 'react-router-dom';
function CurrentPath() {
const location = useLocation();
return Текущий путь: {location.pathname};
}
Эти хуки позволяют отслеживать навигацию и динамически реагировать на изменения маршрута.
Для корректной работы React Router важно контролировать версии
зависимостей, особенно react и react-dom.
Несоответствие версий может вызвать ошибки рендеринга и конфликт хуков.
Рекомендуется:
react и
react-router-dom.Также стоит следить за зависимостями ленивой загрузки, так как
несогласованность версий может привести к неправильному отображению
компонентов в Suspense.