【发布时间】:2021-11-06 21:23:34
【问题描述】:
我正在尝试使用新发布的路由器实现 PrivateRoute 逻辑,但它似乎无法按预期工作..
import { Route, Routes, Navigate } from "react-router-dom";
import LogInPage from "./pages/LogIn";
import DashboardPage from "./pages/Dashboard";
function PrivateRoute({ path, element }) {
const auth = true;
return (
<Route
path={path}
element={auth === true ? element : <Navigate replace to="/login" />}
/>
);
}
function App() {
return (
<Routes>
<Route path="/*" element={<PageNotFound />} />
<Route path="/" element={<Navigate replace to="/dashboard" />} />
<Route path="/login" element={<LogInPage />} />
<PrivateRoute
path="/dashboard"
element={<DashboardPage />}
/>
</Routes>
);
}
export default App;
我错过了什么?如果 PrivateRoute 组件返回 Route,它是否仍然是 Route 组件?
【问题讨论】:
-
私有路由见官方 react-router v6 auth example。
-
谢谢,我尝试了您提到的方式,并且效果很好。不幸的是,我对上面指定的方式更感兴趣,如果它有效...对我来说,这似乎更方便,而不是包装每个元素RequireAuth 组件中的路由..
-
另一种选择是使用公共路径分隔公共和私有路由。例如,
/*的任何内容都是公开的,/app/*的任何内容都是私有的。这些Routes 将包含父elements,其中包含一个Routes组件,该组件包装了它们各自的Route组件。在私有父组件的顶层,您将检查身份验证。如果通过,则落入私有Routes开关;否则,您可以重定向/显示叠加层。
标签: reactjs react-router react-router-dom