React Router — это стандартная библиотека для маршрутизации в приложениях на React, которая позволяет управлять навигацией между различными компонентами и страницами. Для её использования необходимо установить пакет через npm или yarn. В терминале проекта следует выполнить команду:
npm install react-router-dom
или, если используется yarn:
yarn add react-router-dom
После установки пакета можно импортировать необходимые компоненты для
работы с маршрутизацией, такие как BrowserRouter,
Routes, Route, Link и
Navigate.
BrowserRouter является базовым компонентом, который
оборачивает всё приложение и обеспечивает работу маршрутизации с
использованием истории браузера. Его обычно размещают на самом верхнем
уровне приложения:
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import ReactDOM from 'react-dom/client';
import React from 'react';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
Для организации маршрутов используется компонент Routes,
внутри которого определяются отдельные Route. Каждый
Route задаёт путь (path) и компонент
(element), который должен отображаться при переходе на этот
путь.
import { Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
import Contact from './pages/Contact';
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/contact" element={<Contact />} />
</Routes>
);
}
export default App;
Ключевые моменты:
path="/" — путь, который соответствует корневой
странице.element={<Home />} — React-компонент, который
будет отображён при совпадении пути.Route должен быть вложен в Routes,
иначе маршрутизация работать не будет.Для перехода между маршрутами используется компонент
Link. Он заменяет стандартные теги <a> и
предотвращает перезагрузку страницы, сохраняя преимущества SPA (Single
Page Application):
import { Link } from 'react-router-dom';
function Navbar() {
return (
<nav>
<Link to="/">Главная</Link>
<Link to="/about">О нас</Link>
<Link to="/contact">Контакты</Link>
</nav>
);
}
export default Navbar;
Особенности использования Link:
to задаёт путь маршрута, на который будет
происходить переход.<a href="">.Иногда необходимо переходить по маршрутам программно, например, после
выполнения действия или отправки формы. Для этого используется хук
useNavigate:
import { useNavigate } from 'react-router-dom';
function LoginForm() {
const navigate = useNavigate();
const handleLogin = () => {
// логика авторизации
navigate('/dashboard');
};
return (
<button onCl ick={handleLogin}>Войти</button>
);
}
useNavigate() возвращает функцию, позволяющую
программно менять путь.navigate('/dashboard') задаёт путь, на который
будет совершен переход.Для обработки несуществующих страниц используется маршрут с символом
*, который ловит все неопределённые пути:
import NotFound from './pages/NotFound';
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="*" element={<NotFound />} />
</Routes>
path="*" срабатывает на все пути, которые не
соответствуют существующим маршрутам.React Router поддерживает вложенные маршруты, что позволяет создавать
сложные структуры навигации. Вложенный маршрут определяется как дочерний
элемент другого Route:
import Dashboard from './pages/Dashboard';
import Profile from './pages/Profile';
import Settings from './pages/Settings';
<Routes>
<Route path="/dashboard" element={<Dashboard />}>
<Route path="profile" element={<Profile />} />
<Route path="settings" element={<Settings />} />
</Route>
</Routes>
/dashboard/profile строится
автоматически на основе родителя.<Outlet />
для отображения дочерних маршрутов.import { Outlet } from 'react-router-dom';
function Dashboard() {
return (
<div>
<h1>Панель управления</h1>
<Outlet />
</div>
);
}
index.js — подключение BrowserRouter и
рендер App.App.js — определение основных маршрутов через
Routes и Route.components/Navbar.js — навигация с использованием
Link.pages/ — отдельные страницы приложения.Эта структура обеспечивает базовую настройку React Router и готовность к созданию SPA с полноценной маршрутизацией и поддержкой вложенных маршрутов, навигации и обработки ошибок.