此问题在此处已有答案:
How to create a protected route with react-router-dom?(5个答案)
昨天关门了。
我试图在我的项目中实现私有和公共路由。但它不起作用。我遵循最新的方法。我尝试了很多,但无法找出解决方案。登录是在公共路由中。PageLayout及其子项是在私有路由中。将来,我也会添加角色。
Index.js:
const router = createBrowserRouter([
{
path: "/signin",
element: <Signin />,
},
{
path: "/",
element: <PrivateRoute isAuth={true} element={<PageLayout />} />,
errorElement: <ErrorPage />,
children: [
{
index: true,
element: <Dashboard />,
},
{
path: "dashboard",
element: <Dashboard />,
},
{
path: "doctors",
element: <DoctorsPage />,
},
{
path: "adddoctor",
element: <AddDoctorPage />,
},
])
PrivateRoute.js:
const PrivateRoute = ({ element: Element, isAuth, ...rest }) => {
const navigate = useNavigate();
useEffect(() => {
if (!isAuth) {
navigate("/signin", { replace: true });
}
}, [isAuth, navigate]);
return isAuth ? <Route {...rest} element={<Element />} /> : null;
};
export default PrivateRoute;
2条答案
按热度按时间qc6wkl3g1#
我注意到代码中的一个错误:在
PrivateRoutes.js
中,您需要使用来自react-router-dom
的<Outlet />
,而不是<Route />
:修复后应该可以正常工作。我在此处诊断了此问题:https://codesandbox.io/s/naughty-nobel-pphwjx?file=/src/index.js
您可以在这里参考他们的文档:https://reactrouter.com/en/main/start/tutorial
atmip9wb2#