码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何使用react-router v6快速搭建路由?


    前言

    之前一直使用react-router V5,上次搭建一个小项目,下载的react-router V6, 本以为没什么区别,就按照v5的那一套用了,区区小功能,奈何不了我的。然后自信满满的运行,哦豁,不生效,点击也没反应,不应该呀,然后就网上查了一下,确实不一样了,改动还不少呢,顺便去瞄了一眼官方文档,折腾一番,完美解决。

    V6 & V5

    React Router 6 是 React Router 库的一个重大升级,它引入了一些重要的变化和新功能,以提供更好的路由管理体验。以下是 React Router 6 的一些主要改进和变化,以及相应的代码示例和用法:

    1. 组件结构变化:
      React Router 6 引入了新的组件结构。原来的 组件被移除,取而代之的是一个新的 组件,它用于定义路由层次结构。

      import { Routes, Route } from 'react-router-dom';
      
      function App() {
        return (
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/about" element={<About />} />
          </Routes>
        );
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    2. 导航链接:
      React Router 6 引入了 组件,用于创建导航链接。 v6 中消除了这种歧义模糊的写法,在下,无论当前 url 是否拥有后斜杠,将始终被渲染为

      import { Link } from 'react-router-dom';
      
      function Navigation() {
        return (
          
      Home About
      ); }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

    3.useNavigate
    useNavigate 代替了之前的useHistory。useNavigate 钩子返回了一个函数 navigate,当用户点击按钮时,它会调用 navigate('/new-path') 来导航到指定的路由。这允许您以编程方式控制用户在应用程序中的导航,而无需依赖导航链接或其他用户界面元素。

    import { useNavigate } from 'react-router-dom';
    
    function MyComponent() {
      const navigate = useNavigate();
    
      const handleNavigation = () => {
        navigate('/new-path');
      };
    
      return (
        <div>
          <button onClick={handleNavigation}>Go to New Path</button>
        </div>
      );
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. 重定向
      Navigate代替Redirect组件,实现重定向。 组件是用于在组件内部进行编程式导航的,不应该用于定义路由规则或路由重定向。路由的定义应该在 组件中完成。
    import { Route } from 'react-router-dom';
    
    function MyComponent() {
      // 在需要的地方执行重定向逻辑
      // 例如,可以根据某些条件进行重定向
      const shouldRedirect = true;
      return (
        <Route
          path="/"
          element={
            shouldRedirect
              ? <Navigate to="/new-path" replace />
              : <YourComponent />
          }
        />
      );
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 路由参数:
      React Router 6 采用了新的方式来处理路由参数。参数现在是在路由路径中使用冒号进行定义,然后可以在组件中通过 useParams 钩子来访问。

      // 路由定义
      } />
      
      // 在组件中获取参数
      import { useParams } from 'react-router-dom';
      
      function User() {
        const { id } = useParams();
        // 使用 id
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    2. 嵌套路由:
      React Router 6 支持更灵活的嵌套路由。您可以在路由配置中使用 组件来定义嵌套路由。

      function App() {
        return (
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/user/:id" element={<User />}>
              <Route index element={<UserProfile />} />
              <Route path="posts" element={<UserPosts />} />
            </Route>
          </Routes>
        );
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    使用示例

    入口文件index.tsx如下

    const root = ReactDOM.createRoot(
      document.getElementById("root") as HTMLElement
    );
    root.render(
        <App />
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    App组件:

    import React from "react";
    import { Routes, Route, Navigate, BrowserRouter } from "react-router-dom";
    import * as hhh from 'react-router-dom'
    import Hmoe from "@/pages/index";
    import Login from "@/pages/index";
    export default function routers() {
      console.log("gfb", hhh);
      
      return (
        <div style={{height:'100%'}}>
          <BrowserRouter>
            <Routes>
            // 注意这里的/*  不加上,Home组件下路由无法匹配
              <Route path="/home/*" element={<Hmoe />}></Route>
              <Route path="/login" element={<Login />}></Route>
              // 重定向的写法
              <Route path="/" element={<Navigate to="/home" />}></Route>
            </Routes>
          </BrowserRouter>
        </div>
      );
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    Home组件

    import React from "react";
    import { Routes, Route, Link } from "react-router-dom";
    
    import EditorTable from "./DropTree/EditorTable";
    import UploadCom from "@/components/Upload";
    import Todolist from "@/pages/MyUseContext/TodoList";
    import Routers from "@/pages/Routers/index";
    
    import "./style.less";
    
    const AppIndex = () => {
      return (
        <div className="pageRoot">
          <div className="left-demo">
            <div style={{ height: 32 }}>
              <Link to="/home/upload">上传文件</Link>
            </div>
            <div style={{ height: 32 }}>
              <Link to="/home/todolist">todolist</Link>
            </div>
            <div style={{ height: 32 }}>
              <Link to="/home/editorTable">可编辑Table</Link>
            </div>
            <div style={{ height: 32 }}>
              <Link to="/home/testRoute">Prompt</Link>
            </div>
          </div>
          <div className="right-bigData">
            <Routes>
            // 这里就省略了/home 
              <Route path="/upload" element={<UploadCom />} />
              <Route path="/todolist" element={<Todolist />} />
              <Route path="/editorTable" element={<EditorTable />} />
              <Route path="/testRoute" element={<Routers />} />
            </Routes>
          </div>
        </div>
      );
    };
    export default AppIndex;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    例子就是这个样子的,这里没调样式
    在这里插入图片描述

  • 相关阅读:
    python 数据保存为npy和npz格式并读取
    一键AI去除视频水印和字幕!
    浏览器面试题
    git log 命令详解
    【算法集训】基础算法:二分查找 | 概念篇
    【论文精读3】CasMVSNet
    「高效程序员的修炼」代码版本管理工具 Git 用起来 01 Git 基础
    YOLO-V3实时检测实现(opencv+python实现)
    Golang通道(Channel)原理解析
    常见算法-巴斯卡三角形(Pascal)
  • 原文地址:https://blog.csdn.net/study_way/article/details/134051181
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号