繁体   English   中英

React Router v6 私有路由 - 使用 Moralis api

[英]React Router v6 Private Routes - With Moralis api

我不明白为什么这段代码不起作用。 “isAuthenticated”是来自moralis API 的布尔值。 如果为 true,则应呈现 outlet,如果为 false,则应呈现导航选项。

const ProtectedRoutes = () => {
  const { isAuthenticated } = useMoralis();
  return isAuthenticated ? <Outlet /> : <Navigate to="/" />;
};

return (
  <Routes>
    <Route path={ROUTER_PATHS.SIGNUP} element={<Signup />} />
    <Route element={<ProtectedRoutes />}>
      <Route path={ROUTER_PATHS.EMPLOYER} element={<MarketPlaceEmployer />} />
      <Route path={ROUTER_PATHS.EMPLOYEE} element={<MarketPlaceEmployee />} />
    </Route>
  </Routes>
);

使用<Outlet />组件将使ProtectedRoutes组件成为 Layout 组件,以使ProtectedRoutes作为包装组件工作,您应该选择渲染子组件,将ProtectedRoutes组件更改为,

const ProtectedRoutes = ({ children }) => {
  const { isAuthenticated } = useMoralis();
  if (!isAuthenticated) {
    return <Navigate to="/" />;
  }
  return children ? children : <Outlet />;
};

另外,在path之前添加exact

 return (
<Routes>
  <Route path={ROUTER_PATHS.SIGNUP} element={<Signup />} />
  <Route element={<ProtectedRoutes />}>
    <Route exact path={ROUTER_PATHS.EMPLOYER} element={<MarketPlaceEmployer />} />
    <Route exact path={ROUTER_PATHS.EMPLOYEE} element={<MarketPlaceEmployee />} />
  </Route>
</Routes>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM