Настройка маршрутизации в React осуществляется с помощью библиотеки React Router (react-router-dom). Вот пошаговое руководство по настройке:
Сначала необходимо установить пакет:
npm install react-router-dom
# или
yarn add react-router-dom
Основная структура маршрутизации:
import { BrowserRouter, Routes, Route } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
<Route path="/contact" element={<ContactPage />} />
</Routes>
</BrowserRouter>
);
}
Используйте компонент Link
для навигации:
import { Link } from 'react-router-dom';
function NavBar() {
return (
<nav>
<Link to="/">Главная</Link>
<Link to="/about">О нас</Link>
<Link to="/contact">Контакты</Link>
</nav>
);
}
Для параметризованных URL:
<Route path="/users/:id" element={<UserProfile />} />
// В компоненте UserProfile:
import { useParams } from 'react-router-dom';
function UserProfile() {
const { id } = useParams();
return <div>Профиль пользователя {id}</div>;
}
Для создания иерархической структуры:
<Route path="/dashboard" element={<Dashboard />}>
<Route path="stats" element={<Stats />} />
<Route path="settings" element={<Settings />} />
</Route>
// В компоненте Dashboard:
import { Outlet } from 'react-router-dom';
function Dashboard() {
return (
<div>
<h1>Панель управления</h1>
<Outlet /> {/* Здесь будут рендериться вложенные маршруты */}
</div>
);
}
Используйте хук useNavigate
:
import { useNavigate } from 'react-router-dom';
function LoginButton() {
const navigate = useNavigate();
const handleLogin = () => {
// Логика авторизации...
navigate('/dashboard');
};
return <button onClick={handleLogin}>Войти</button>;
}
Добавьте catch-all маршрут:
<Route path="*" element={<NotFoundPage />} />
Пример реализации приватных маршрутов:
function PrivateRoute({ children }) {
const isAuthenticated = checkAuth(); // Ваша функция проверки авторизации
return isAuthenticated ? children : <Navigate to="/login" />;
}
// Использование:
<Route
path="/admin"
element={
<PrivateRoute>
<AdminPanel />
</PrivateRoute>
}
/>
Оптимизация с помощью React.lazy:
const AboutPage = React.lazy(() => import('./AboutPage'));
<Route
path="/about"
element={
<React.Suspense fallback={<Loader />}>
<AboutPage />
</React.Suspense>
}
/>
Для большинства приложений этого достаточно. Дополнительные возможности (history management, location state) можно изучить в документации React Router.