我正在try 在我的项目中实现私有和公共路由.但这并不管用.我正在遵循最新的方法.我试了很多次,但还是想不出解决办法. 登录是在公共路由上进行的.而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;

推荐答案

我注意到代码中有一个错误:在PrivateRoutes.js中,您需要使用react-router-dom中的<Outlet />,而不是<Route />:

  return isAuth ? <Outlet /> : <h1>Authenticated</h1>;

一旦这个问题解决了,它就应该可以工作了.我在这里解决了这个问题:https://codesandbox.io/s/naughty-nobel-pphwjx?file=/src/index.js

您可以在此处参考他们的文档:https://reactrouter.com/en/main/start/tutorial

Reactjs相关问答推荐

如何在useEffect中使用useParams()

在带有和设计的表格中禁用和取消选中复选框

如何将Redux工具包添加到expo (SDK 50)项目?

在下一个js中使用ESTAccountWithEmailAndPassword函数时循环

如何将图像(在代码中称为自己)定位在蓝色圈内的点上?我正在使用material UI和Reaction

为什么我的react虚拟化列表不显示滚动条,除非我确保高度低于rowCount*rowHeight?

更改滑块标记的文本 colored颜色 ./Reaction/MUI 5

阻止组件更新的多分派Redux Thunk或setState是否有任何问题

当 URL 与我声明的任何路由都不匹配时,如何使用不会重定向到错误页面的动态 URL? - react 路由 dom

当`useSelector`回调中的属性值更新时,将会使用更新后的值吗?

卸载 React 组件时未清除本地存储项目

useEffect 渲染没有依赖数组的组件

在 Nextjs13 应用程序目录中呈现从 supabase 获取的数据

来自一个自定义 React Native 组件的样式从另一个自定义组件移除样式

无法读取未定义的react native 的属性参数

如何在对话素材ui中设置边框半径?

Material UI:使用 mui 手风琴时出现props 类型失败:isValidElement 不是函数

父状态改变后子组件丢失状态

如何跨微前端 React 应用管理状态管理?

单击三个按钮之一后如何显示特定按钮的内容?单击其中一个按钮后应隐藏所有按钮