当前位置: 首页 > article >正文

react-router-dom 库作用

`react-router-dom`是一个用于在 React 应用中实现路由功能的重要库

一、实现页面导航

1. 声明式路由定义

1.1 基本原理

使用`react-router-dom`可以在代码中直接定义一个路由规则,如从`/home`路径导航到`Home`组件。

1.2 代码示例

`Router` 路由根容器,`Routes` 包裹所有的路由规则,`Route` 定义了一条具体的路由,包括路径(`path`)和对应的组件(`element`)。

import { BrowserRouter as Router, Route, Routes } from "react-router-dom";

import Home from "./Home";

import About from "./About";



const App = () => {

  return (

    <Router>

      <Routes>

        <Route path="/home" element={<Home />} />

        <Route path="/about" element={<About />} />

      </Routes>

    </Router>

  );

};



export default App;

2. 动态路由匹配

2.1 处理可变路径参数

可以定义一个路由路径为`/user/:id`,其中`:id`就是动态参数。

2.2 代码示例

import {

  BrowserRouter as Router,

  Route,

  Routes,

  useParams,

} from "react-router-dom";



const UserDetail = () => {

  const { id } = useParams();

  return (

    <div>

      <h1>User Detail for ID: {id}</h1>

    </div>

  );

};



const App = () => {

  return (

    <Router>

      <Routes>

        <Route path="/user/:id" element={<UserDetail />} />

      </Routes>

    </Router>

  );

};



export default App;

二、嵌套路由和布局管理

1. 嵌套路由实现

1.1 构建多层级页面结构

例如:有一个父路由`/blog`,其下包含子路由`/blog/posts`(文章列表)和`/blog/post/:id`(单个文章详情)。

1.2 代码示例

import { BrowserRouter as Router, Route, Routes } from "react-router-dom";

import Blog from "./Blog";

import BlogPosts from "./BlogPosts";

import BlogPostDetail from "./BlogPostDetail";



const App = () => {

  return (

    <Router>

      <Routes>

        <Route path="/blog" element={<Blog />}>

          <Route path="posts" element={<BlogPosts />} />

          <Route path="post/:id" element={<BlogPostDetail />} />

        </Route>

      </Routes>

    </Router>

  );

};



export default App;

2. 布局管理与共享布局组件

2.1 统一布局应用

假设我们有一个名为`Layout`的布局组件,包含了导航栏和侧边栏。

2.2 代码示例

import { BrowserRouter as Router, Route, Routes } from "react-router-dom";

import Layout from "./Layout";

import Home from "./Home";

import About from "./About";



const App = () => {

  return (

    <Router>

      <Routes>

        <Route path="/" element={<Layout />}>

          <Route path="home" element={<Home />} />

          <Route path="about" element={<About />} />

        </Route>

      </Routes>

    </Router>

  );

};



export default App;

三、代码分割和懒加载

1. 懒加载原理和优势

1.1 优化初始加载性能

例如:将每个模块的组件懒加载,使得应用在初始启动时只加载必要的组件。

1.2 代码示例

import {

  BrowserRouter as Router,

  Route,

  Routes,

  lazy,

  Suspense,

} from "react-router-dom";



const Dashboard = lazy(() => import("./Dashboard"));

const Reports = lazy(() => import("./Reports"));

const Settings = lazy(() => import("./Settings"));



const App = () => {

  return (

    <Router>

      <Routes>

        <Route

          path="/dashboard"

          element={

            <Suspense fallback={<div>Loading...</div>}>

              <Dashboard />

            </Suspense>

          }

        />

        <Route

          path="/reports"

          element={

            <Suspense fallback={<div>Loading...</div>}>

              <Reports />

            </Suspense>

          }

        />

        <Route

          path="/settings"

          element={

            <Suspense fallback={<div>Loading...</div>}>

              <Settings />

            </Suspense>

          }

        />

      </Routes>

    </Router>

  );

};



export default App;


http://www.kler.cn/a/391549.html

相关文章:

  • 普通电脑上安装属于自己的Llama 3 大模型和对话客户端
  • AcWing 302 任务安排 斜率优化的dp
  • ❤React-React 组件通讯
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • 2024开发者浏览器必备扩展,不允许还有人不知道~
  • C++知识回顾
  • 游戏之地图找怪进行PK升级。C++
  • hive alter table add columns 是否使用 cascade 的方案
  • Linux后台运行jar包,nohup、>、
  • 源码解析-Spring Eureka
  • Qt 获取当前系统中连接的所有USB设备的信息 lsusb版
  • Spring Boot编程训练系统:架构设计与技术选型
  • creo toolkit二次开发学习之获取任意选择模型作为元件,并进行获取约束等
  • 6.2 对角化矩阵(1)
  • 【机器学习导引】ch6-支持向量机
  • RabbitMQ队列详细属性(重要)
  • 【MATLAB源码-第215期】基于matlab的8PSK调制CMA均衡和RLS-CMA均衡对比仿真,对比星座图和ISI。
  • Django前后端分离基本流程
  • 计算机网络:运输层 —— 运输层端口号
  • 解决全局安装@vue/cli 后vue -V不是内部或外部命令
  • JVM(二、类加载系统)
  • 20. 类模板
  • SpringBoot Tomcat 请求处理全流程详解
  • 汇川PLC EtherNET/IP无线通信,开启国产工控无线互联新时代
  • SASS 控制指令详解@for、@if、@each、@while