react项目中createBrowserRouter的使用

react-router-dom官网:https://reactrouter.com/en/main

首先,安装react-router-dom(创建项目时并不会安装这个,需要手动安装)

npm install react-router-dom

 为了方便全局配置,在src目录项新建一个router文件夹,文件夹里新建index.js

// router/index.js
import HomePage from "../views/HomePage";  // 首页
import CulturePage from "../views/CulturePage";  // 饮食文化
import ManagePage from "../views/ManagePage";  // 美食管理
import InfoPage from "../views/InfoPage";  // 美食详情页
import AddFood from "../views/manage/AddFood";  // 美食管理 - 添加美食
import FoodManage from "../views/manage/FoodManage";  // 美食管理 - 美食管理
import MyProfile from "../views/manage/MyProfile";  // 美食管理 - 个人信息
import RootPage from "../views/RootPage";

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

const router = createBrowserRouter([
  {
    path: "/gxt/*",
    element: <RootPage />,
    children: [
      {
        path: "home",
        element: <HomePage />,
        index: true
      },
      {
        path: "culture",
        element: <CulturePage></CulturePage>
      },
      {
        path: "info",
        element: <InfoPage></InfoPage>
      },
      {
        path: "manage/*",
        element: <ManagePage></ManagePage>,
        children: [
          {
            path: "profile",
            element: <MyProfile></MyProfile>
          },
          {
            path: "foodManage",
            element: <FoodManage></FoodManage>
          },
          {
            path: "addFood",
            element: <AddFood></AddFood>
          }
        ]
      }
    ]
  }
], {basename: "/"})

export default router

注意,如果有children,也就是子路由,path的末尾需要加上"/*" ,子路由开头不需要加斜杠

App.js

// 只展示部分代码
import './App.css';
import {RouterProvider} from "react-router-dom";
import router from "./router";

function App() {
  return (
    <div className="App">
      <RouterProvider router={router}>
      </RouterProvider>
    </div>
  );
}

export default App;

RootPage.js

// 只展示部分代码
// 需要显示子路由组件的地方加上<Outlet />就行
// 更深的嵌套路由以此类推
import './../App.css';
import {Outlet} from "react-router-dom";

function RootPage() {

  return (
    <div className="App">
      <Outlet />
    </div>
  );
}
export default RootPage;

### 如何在 React 项目中设置和配置路由 #### 使用 `react-router-dom` 进行基本路由配置 为了实现基础的路由功能,在 `src` 目录下创建一个名为 `routes.js` 的文件用于定义应用内的路径映射关系[^1]: ```javascript import React from 'react'; import { createBrowserRouter, Route, RouterProvider } from 'react-router-dom'; // 定义页面组件 const Home = () => <h2>Home</h2>; const About = () => <h2>About</h2>; // 创建浏览器路由器实例并注册路由规则 const router = createBrowserRouter([ { path: '/', element: <Home />, }, { path: '/about', element: <About />, } ]); export default router; ``` 接着修改项目的入口组件 `App.js` 来集成上述定义好的路由逻辑[^2]: ```jsx import React from 'react'; import { RouterProvider } from 'react-router-dom'; import router from './routes'; // 导入自定义的路由表 function App() { return ( <div> <RouterProvider router={router} /> </div> ); } export default App; ``` 这样就完成了最简单的路由配置工作。 #### 处理嵌套路由与子组件展示 对于更复杂的场景比如存在父子级关联的情况,则可以在父组件内部预留位置给子组件渲染,并利用 props.children 属性传递内容[^3]: ```jsx import React from 'react'; const ParentComponent = ({ children }) => ( <section> <header><h1>Parent Component Header</h1></header> <main>{children}</main> {/* 子路由会在这里呈现 */} </section> ); export default ParentComponent; ``` #### 动态加载及权限控制下的高级路由设定 当涉及到按需懒加载模块以及基于角色访问控制等功能需求时,可以考虑采用如下方式构建更加灵活高效的路由体系[^4]: ```javascript import React, { lazy, Suspense } from 'react'; import { createBrowserRouter } from 'react-router-dom'; // 延迟加载指定组件 const LazyHome = lazy(() => import('./pages/Home')); const LazyAdminPanel = lazy(() => import('./pages/Admin')); // 构建带权限校验机制的动态路由列表 const routesWithAuthCheck = [ { path: "/", element: ( <Suspense fallback={<p>Loading...</p>}> <LazyHome /> </Suspense> ), authRequired: false, }, { path: "/admin", element: ( <Suspense fallback={<p>Loading...</p>}> <LazyAdminPanel /> </Suspense> ), authRequired: true, rolesAllowed: ['admin'] } ]; // 实际使用的路由对象应在此处进一步处理... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值