使用新版本 6 的 react-router 编写 ProtectedRoute 的正确方法是什么?我写了这个,但它不是路由
const PrivateRoute = ({ component: Component, ...props }) => { if (!Component) return null; return props.isAuthenticated ? <Component /> : <Navigate to={props.redirectLink} /> } export default PrivateRoute;
这是我使用useRoutes实现私有路线的工作示例。
App.js
import routes from './routes'; import { useRoutes } from 'react-router-dom'; function App() { const { isLoggedIn } = useSelector((state) => state.auth); const routing = useRoutes(routes(isLoggedIn)); return ( <> {routing} </> ); }
routes.js
import { Navigate,Outlet } from 'react-router-dom'; const routes = (isLoggedIn) => [ { path: '/app', element: isLoggedIn ? <DashboardLayout /> : <Navigate to="/login" />, children: [ { path: '/dashboard', element: <Dashboard /> }, { path: '/account', element: <Account /> }, { path: '/', element: <Navigate to="/app/dashboard" /> }, { path: 'member', element: <Outlet />, children: [ { path: '/', element: <MemberGrid /> }, { path: '/add', element: <AddMember /> }, ], }, ], }, { path: '/', element: !isLoggedIn ? <MainLayout /> : <Navigate to="/app/dashboard" />, children: [ { path: 'login', element: <Login /> }, { path: '/', element: <Navigate to="/login" /> }, ], }, ]; export default routes;