React Router — это библиотека для организации маршрутов в приложениях на React. Она позволяет создавать многостраничные интерфейсы, управлять навигацией и динамически отображать компоненты на основе URL. Основные концепции включают Routes, Route, Link, Navigate и useParams.
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
function App() {
return (
} />
} />
);
}
Ключевые моменты:
Routes заменяет устаревший Switch и
отвечает за выбор активного маршрута.Route определяет путь (path) и компонент
(element) для отображения.Link создаёт ссылки без перезагрузки страницы, что
обеспечивает SPA-поведение.Navigate позволяет программно перенаправлять
пользователя.React Router поддерживает динамические сегменты пути с помощью
:param. Значения параметров можно извлекать через хук
useParams.
import { useParams } from 'react-router-dom';
function Product() {
const { id } = useParams();
return Товар с ID: {id};
}
Особенности:
/category/:categoryId/product/:productId.Вложенные маршруты позволяют строить иерархию компонентов. Для этого
используется комбинация Outlet и Routes.
import { Outlet, Link } from 'react-router-dom';
function Dashboard() {
return (
);
}
function App() {
return (
}>
} />
} />
);
}
Особенности:
Outlet выступает как плейсхолдер для дочерних
маршрутов.Для управления маршрутизацией в коде используется хук
useNavigate. Он заменяет устаревший
history.
import { useNavigate } from 'react-router-dom';
function Login() {
const navigate = useNavigate();
function handleLogin() {
// Проверка логина
navigate('/dashboard');
}
return ;
}
Особенности:
replace: true)
или добавлением в стек (push по умолчанию).navigate(/product/${id}).Для реализации доступа только авторизованных пользователей используют обёртки, проверяющие состояние аутентификации.
function PrivateRoute({ element }) {
const isAuthenticated = useAuth();
return isAuthenticated ? element : ;
}
} />} />
Особенности:
Для оптимизации производительности React Router поддерживает ленивую
загрузку компонентов через React.lazy и
Suspense.
import React, { Suspense, lazy } from 'react';
const About = lazy(() => import('./About'));
function App() {
return (
Загрузка... Особенности:
Suspense обеспечивает отображение резервного контента
во время загрузки.Для добавления плавных анимаций используют сторонние библиотеки, например Framer Motion. React Router совместим с такими библиотеками через обёртки компонентов маршрутов.
import { motion } from 'framer-motion';
import { Routes, Route, useLocation } from 'react-router-dom';
function AnimatedRoutes() {
const location = useLocation();
return (
}
/>
}
/>
);
}
Особенности:
key={location.pathname} необходим для корректного
перезапуска анимации при смене маршрута.initial, animate и
exit позволяет создавать плавные эффекты входа и выхода
компонентов.React Router предоставляет возможность сохранять состояние между
маршрутами через state в navigate и
location.
navigate('/checkout', { state: { cart: currentCart } });
function Checkout() {
const location = useLocation();
console.log(location.state.cart);
}
Особенности:
state не отображается в URL, безопасно для передачи
временных данных.Для обработки query-параметров используют объект
URLSearchParams вместе с useLocation.
import { useLocation } from 'react-router-dom';
function Search() {
const { search } = useLocation();
const query = new URLSearchParams(search);
const term = query.get('q');
return Результаты поиска для: {term};
}
Особенности: