使用 react router dom v6 保護路由渲染沒有返回任何內容

艾瑪 R。

如何使用 react router dom v6 庫保護路由?我正在使用 reactjs 創建我的第一個應用程序,我想知道如何保護路由,在這種情況下,/ dashboard /在此區域中找到的所有路由只能輸入具有憑據的用戶,即已註冊的用戶。

原帖:https : //stackoverflow.com/a/69870303/17222061

錯誤:PrivateRoute(...):渲染沒有返回任何內容。這通常意味著缺少 return 語句。或者,不渲染任何內容,返回 null。

公共路線(任何人都可以看到這些頁面)

  • http://本地主機:3000/
  • http://localhost:3000/註冊
  • http://localhost:3000/登錄

私有路由(當用戶登錄時):

  • http://localhost:3000/dashboard/
  • http://localhost:3000/dashboard/accounting
  • http://localhost:3000/dashboard/employee
  • http://localhost:3000/dashboard/ecommerce

包.json

"react-router-dom": "^6.0.1",

索引.js

import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom";
import App from "./App";

ReactDOM.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById("root")
);

應用程序.js

import AppRouter from "./routers/AppRouter";
import "./css/main.css";

function App() {
  return (
    <>
      <AppRouter />
    </>
  );
}

export default App;

應用路由器

import { Route, Routes } from "react-router-dom";
import HomeView from "../components/views/public/HomeView";
import LoginView from "../components/views/public/LoginView";
import NotFound from "../components/views/public/NotFound";
import RegisterView from "../components/views/public/RegisterView";
import DashboardRoutes from "./DashboardRoutes";
import PrivateRoute from "./PrivateRoute";

const AppRouter = () => {
  return (
    <div>
      <Routes>
        {/* Public routes: */}
        <Route path="/" element={<HomeView />} />
        <Route path="/login" element={<LoginView />} />
        <Route path="/register" element={<RegisterView />} />
        {/* Private routes: */}
        <Route
          path="dashboard/*"
          element={
            <PrivateRoute>
              <DashboardRoutes />
            </PrivateRoute>
          }
        />
        <Route path="*" element={<NotFound />} />
      </Routes>
    </div>
  );
};
export default AppRouter;

儀錶盤路由

import { Routes, Route } from "react-router-dom";
import AccountingHomeView from "../components/views/accounting/AccountingHomeView";
import DashboardHomeView from "../components/views/dashboard/DashboardHomeView";
import EcommerceHomeView from "../components/views/ecommerce/EcommerceHomeView";
import EmployeeHomeView from "../components/views/employee/EmployeeHomeView";
import NotFound from "../components/views/public/NotFound";

const DashboardRoutes = function () {
  return (
    <>
      <Routes>
        <Route path="/" element={<DashboardHomeView />} />
        <Route path="accounting" element={<AccountingHomeView />} />
        <Route path="employee" element={<EmployeeHomeView />} />
        <Route path="ecommerce" element={<EcommerceHomeView />} />
        <Route path="*" element={<NotFound />} />
      </Routes>
    </>
  );
};

export default DashboardRoutes;

PrivateRoute(這裡的邏輯)

import { Navigate } from "react-router-dom";

const PrivateRoute = function ({ children }) {
  // True or False to emulated login or logout user
  let isAuthenticated = false;
  if (isAuthenticated) {
    return children;
  } else {
    <Navigate to="/login" />;
  }
};

export default PrivateRoute;

錯誤:PrivateRoute(...):渲染沒有返回任何內容。這通常意味著缺少 return 語句。或者,不渲染任何內容,返回 null。

德魯里斯

您需要從PrivateRoute,即返回有效的 JSX return <Navigate to="/login" replace />;

const PrivateRoute = function ({ children }) {
  // True or False to emulated login or logout user
  let isAuthenticated = false;
  if (isAuthenticated) {
    return children;
  } else {
    return <Navigate to="/login" replace />; // <-- return the redirect
  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MUI Drawer 不使用 React-router-dom v6 渲染

React Router Dom V6 嵌套路由属性

如何使用 react-router-dom v6 渲染具有不同佈局/元素的組件

使用React Router V6实施受保护的路由

React/Typescript 条件路由 - 从 React Router Dom v5 更新到 v6

在 React js react-router-dom V6 中實現嵌套路由

在 react-router-dom (v6) 中使用 Navlink 傳遞道具

使用 <Navigate /> 傳遞 props (react-router-dom v6)

使用 react-router-dom v6 导航不起作用

react-router-dom v6 在当前页面上渲染新页面

嵌套路由 react-router-dom v6 不起作用

如何導航到 React Router Dom V6 中的嵌套路由

react-router-dom V6 中的嵌套路由

React Router Dom v6 中的重定向

React-Router-Dom v6 中的重定向

如何在不指定键的情况下使用 React-Router-DOM v6 `useSearchParams` 获取所有查询参数?

如何在react-router-dom v6中返回上一条路由

React-router-dom V6 没有正确更改路由(刷新 - 需要 f5 页面)

使用 react-router-dom (v6) 成功登录后,Reactjs 重定向到仪表板页面

React Router v6 不渲染任何东西

React Router v6 - 如何在路由中使用@符号?

在 react-router v6 的 mapStateToProps 中使用 urlParams

在 react-router-dom v6 中有多個路徑到同一組件

react-router v6 双渲染组件

React-Router (experimental v6) 渲染问题?

React-router-dom (v6) 和 Framer Motion (v4)

React Router Dom v6 - 函數作為 React 子節點無效

是否有任何方法可以在单击按钮时使用React Router v6打开页面

如何在 react-router-dom@v6 中使用私有路由