React Router — это библиотека для управления навигацией и маршрутизацией в приложениях на React. Она позволяет определять пути, связывать их с компонентами и управлять историей браузера без перезагрузки страницы. Основные концепции включают:
Пример базового маршрута:
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import Home from './Home';
import About from './About';
function App() {
return (
<Router>
<nav>
<Link to="/">Главная</Link>
<Link to="/about">О сайте</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Router>
);
}
Вложенные маршруты позволяют создавать иерархическую
структуру страниц. Компонент Outlet выступает как
точка рендеринга дочерних маршрутов.
function Dashboard() {
return (
<div>
<h2>Панель управления</h2>
<Outlet />
</div>
);
}
function App() {
return (
<Router>
<Routes>
<Route path="/dashboard" element={<Dashboard />}>
<Route path="users" element={<Users />} />
<Route path="settings" element={<Settings />} />
</Route>
</Routes>
</Router>
);
}
React Router позволяет захватывать динамические сегменты URL с
помощью двоеточия :.
<Route path="/profile/:id" element={<Profile />} />
В компоненте Profile параметры доступны через хук
useParams:
import { useParams } from 'react-router-dom';
function Profile() {
const { id } = useParams();
return <div>Профиль пользователя: {id}</div>;
}
Для управления переходами из кода используется хук
useNavigate. Это удобно для перенаправления после событий
или действий пользователя.
import { useNavigate } from 'react-router-dom';
function LoginForm() {
const navigate = useNavigate();
const handleSubmit = () => {
authenticateUser();
navigate('/dashboard');
};
return <button onCl ick={handleSubmit}>Войти</button>;
}
Маршрутизация напрямую связана с безопасностью, особенно с XSS (Cross-Site Scripting). Основные рекомендации:
DOMPurify.dangerouslySetInnerHTML без
проверки данных. Этот метод может привести к XSS при
неправильной обработке./profile/:id) должны проверяться и типизироваться
для предотвращения инъекций.Пример безопасной работы с query-параметрами:
import { useLocation } from 'react-router-dom';
function SearchResults() {
const { search } = useLocation();
const params = new URLSearchParams(search);
const query = params.get('q');
// Экранирование вывода
return <div>Результаты поиска: {query}</div>;
}
Для приватных маршрутов рекомендуется создавать обертку, проверяющую аутентификацию:
function ProtectedRoute({ element }) {
const isAuthenticated = useAuth();
return isAuthenticated ? element : <Navigate to="/login" />;
}
<Routes>
<Route path="/dashboard" element={<ProtectedRoute element={<Dashboard />} />} />
</Routes>
Это предотвращает прямой доступ к компонентам, где пользователь должен быть авторизован, что уменьшает риск XSS через нежелательные переходы или манипуляции с URL.
Routes и
Route для декларативного определения
маршрутов.Outlet для вложенных
маршрутов.useParams и query-параметры через
URLSearchParams.useNavigate.dangerouslySetInnerHTML.Эти подходы обеспечивают как удобство маршрутизации в приложении, так и минимизацию рисков XSS, сочетая гибкость React Router с безопасной архитектурой фронтенда.