React Router v6 — отличная библиотека для управления навигацией и маршрутизацией в приложениях React. В последней версии React Router v6 представлен более простой и интуитивно понятный способ управления защищенными маршрутами, то есть маршрутами, требующими аутентификации пользователя.
Создание защищенных маршрутов с помощью React Router v6 теперь очень просто. Давайте рассмотрим, как добиться этого с помощью вложенных маршрутов и компонентов макета.
Шаг 1. Настройка маршрутов приложений
Теперь давайте создадим компонент AppRoutes
, который содержит как общедоступные, так и защищенные маршруты. Компонент ProtectedRoute
является здесь центральным, служащим базой для всех маршрутов в пределах компонента защищенного маршрута, такого как «/dashboard» или «/profile».
export const AppRoutes = () => { return ( <Routes> <Route path="/sign-up" element={<SignUp />} /> <Route path="/sign-in" element={<SignIn />} /> <Route element={<ProtectedRoute />}> <Route path="/dashboard" element={<Dashboard />} /> <Route path="/profile" element={<UserProfile />} /> {/* Handle other routes */} </Route> </Routes> ); };
Шаг 2. Внедрение компонента защищенных маршрутов
Перед созданием компонента ProtectedRoute
убедитесь, что у вас есть механизм для определения аутентификации пользователя. Если пользователь не прошел проверку подлинности, он будет перенаправлен на маршрут «/sign-in».
React Router v6 предоставляет ключевой компонент Outlet
. Он позволяет легко отображать дочерние элементы маршрута в родительских маршрутах. Мы можем использовать эту функцию для загрузки вложенных элементов маршрута внутри родительского маршрута. Кроме того, мы также можем добавить компоненты макета, такие как заголовки и боковые панели, которые будут общими для всех вложенных элементов маршрута.
export const ProtectedRoute = () => { const navigate = useNavigate(); const { isAuthenticated } = useAuth(); if (!isAuthenticated) { navigate("/sign-in"); } return ( <Grid container direction="column" width="100%" flexWrap="nowrap"> <DashboardHeader /> <Grid container direction="row" flexWrap="nowrap"> <Grid item> <SideBar /> </Grid> <Outlet /> </Grid> </Grid> ); };
Таким образом, React Router v6 оптимизирует реализацию защищенных маршрутов с помощью компонента выхода и вложенных маршрутов. Это гораздо более простой способ обработки защищенных маршрутов, делающий навигацию по аутентифицированным разделам вашего приложения более плавной и интуитивно понятной.