首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React路由器V6路由

React路由器V6路由
EN

Stack Overflow用户
提问于 2021-11-06 21:23:35
回答 1查看 3.5K关注 0票数 0

我正在尝试用新发布的路由器实现一个PrivateRoute逻辑,但它似乎没有像预期的那样工作。

代码语言:javascript
复制
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组件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 13:57:02

React路由器v6中的You cannot compose Route%s。相反,应在与其他路由相同的级别创建路由,并在element属性中使用PrivateRoute组件。示例(source):

代码语言:javascript
复制
import { Routes, Route, Navigate } from "react-router-dom";

function App() {
  return (
    <Routes>
      <Route path="/public" element={<PublicPage />} />
      <Route
        path="/protected"
        element={
          // Good! Do your composition here instead of wrapping <Route>.
          // This is really just inverting the wrapping, but it's a lot
          // more clear which components expect which props.
          <RequireAuth redirectTo="/login">
            <ProtectedPage />
          </RequireAuth>
        }
      />
    </Routes>
  );
}

function RequireAuth({ children, redirectTo }) {
  let isAuthenticated = getAuth();
  return isAuthenticated ? children : <Navigate to={redirectTo} />;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69868011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档