Сервис быстрых ответов от искусственного интеллекта
Вопрос пользователя:
Ответ нейросети:
import React from 'react'; import { useSelector } from 'react-redux'; import { Outlet, Navigate } from 'react-router-dom'; import { RootState } from '../../store'; import { Role } from '../../types';
export const ProtectedRoute = ({ accessRoles, children }: { accessRoles: Role[], children: React.ReactNode }) => { const { user, loading, initialized } = useSelector((store: RootState) => store.user);
if (loading || !initialized) {
return <div>Loading...</div>;
}
if (!user || !accessRoles.includes(user.role)) {
return <Navigate to="/sign-in" />;
}
return <Outlet>{children}</Outlet>;
};
// In App component import React, { useEffect } from 'react'; import { Routes, Route } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { Home } from '../pages/Home'; import { SignIn } from '../pages/SignIn'; import { getUserThunk, init } from '../features/user/userSlice'; import { AppDispatch } from '../store'; import { ProtectedRoute } from '../components/ProtectedRoute'; import { ROLE } from '../constants'; import { AdminPage } from '../pages/AdminPage';
export const App = () => { const dispatch: AppDispatch = useDispatch();
useEffect(() => {
const token = localStorage.getItem('token');
if (token) {
dispatch(getUserThunk({ token }));
} else {
dispatch(init());
}
}, []);
return (
<>
<Routes>
<Route path='/sign-in' element={<SignIn />} />
<Route path='/' element={<ProtectedRoute accessRoles={[ROLE.USER, ROLE.ADMIN]}><Home /></ProtectedRoute>} />
<Route path='/admin' element={<ProtectedRoute accessRoles={[ROLE.ADMIN]}><AdminPage /></ProtectedRoute>} />
</Routes>
</>
)
};
Напишите нам, если в вопросе есть ваши персональные данные (yasnoponyatno24@yandex.ru)
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.