如何使用react-router v6快速搭建路由?

news2024/11/16 18:05:37

前言

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

V6 & V5

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

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

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

    import { Link } from 'react-router-dom';
    
    function Navigation() {
      return (
        <nav>
          <Link to="/">Home</Link>
          <Link to="/about">About</Link>
        </nav>
      );
    }
    
    • **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. 重定向
    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. 路由参数:
    React Router 6 采用了新的方式来处理路由参数。参数现在是在路由路径中使用冒号进行定义,然后可以在组件中通过 useParams 钩子来访问。

    // 路由定义
    <Route path="/user/:id" element={<User />} />
    
    // 在组件中获取参数
    import { useParams } from 'react-router-dom';
    
    function User() {
      const { id } = useParams();
      // 使用 id
    }
    
  2. 嵌套路由:
    React Router 6 支持更灵活的嵌套路由。您可以在路由配置中使用 <Routes> 组件来定义嵌套路由。

    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>
      );
    }
    

使用示例

入口文件index.tsx如下

const root = ReactDOM.createRoot(
  document.getElementById("root") as HTMLElement
);
root.render(
    <App />
);

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>
  );
}

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;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

foo = foo || bar 的深入解析

目录 前言 用法 代码示例 理解 注意点 结论 前言 在JavaScript中&#xff0c;foo foo || bar 是一种常见的编程模式&#xff0c;用于设置变量的默认值或者确保变量被赋值。这种写法利用了JavaScript中逻辑运算符的短路特性&#xff0c;即在逻辑运算中&#xff0c;一旦结…

docker - window Docker Desktop升级

文章目录 前言docker - window Docker Desktop升级 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来…

通过el-tree 懒加载树,创建国家地区四级树

全国四级行政地区树数据库sql下载路径&#xff1a;【免费】全国四级地区(省市县)数据表sql资源-CSDN文库https://download.csdn.net/download/weixin_51722520/88469807?spm1001.2014.3001.5503 我在后台获取地区信息添加了限制&#xff0c;只获取parentid为当前的地…

使用 jdbc 技术升级水果库存系统(后端最终版本,不包含前端)

1、配置依赖 <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><dependency><groupId>junit</groupId><…

释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[1.安装部署篇--简洁版],支持Linux/Windows部署安装

搜索推荐系统专栏简介&#xff1a;搜索推荐全流程讲解&#xff08;召回粗排精排重排混排&#xff09;、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战&#xff08;含码源&#xff09; 专栏详细介绍&#xff1a;搜索推荐系统专栏简介&#xff1a;搜索推荐全流程讲…

基于springboot零食商城管理系统

功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品&#xff0c;并将它们添加到购物车中。购物车可以保存用户的选购商品&#xff0c;允许随时查看已选择的商品和它们的数量。一旦用户满意&#xff0c;他们…

Geom2d_OffsetCurve解析

Geom2d_OffsetCurve (const Handle< Geom2d_Curve > &C, const Standard_Real Offset, const Standard_Boolean isNotCheckC0Standard_False) chatgpt解析&#xff1a;Geom2d_OffsetCurve 是 OpenCascade 中的函数&#xff0c;用于构造偏移曲线。下面是对该函数的参…

CDR和AI哪个软件更好用?

设计软件市场中&#xff0c;CorelDRAW和Adobe Illustrator&#xff08;简称AI&#xff09;无疑是两大重量级选手。它们各自拥有庞大的用户群和丰富的功能&#xff0c;但究竟哪一个更好用&#xff1f;本文将从多个角度出发&#xff0c;对这两款软件进行全面而深入的比较&#xf…

编曲宿主软件哪个更好用?

音乐编曲软件的出现使得音乐创作者能够克服时间和空间的限制&#xff0c;随时随地进行创作。随着信息时代的发展&#xff0c;使用编曲软件已成为音乐创作领域的主流。那么编曲软件哪个好用呢&#xff1f;我推荐这三款。 在业内&#xff0c;常用的音乐编曲软件包括Cubase、Logi…

RHCE8 资料整理(四)

RHCE8 资料整理 第四篇 存储管理第13章 硬盘管理13.1 对磁盘进行分区13.2 交换分区&#xff08;swap分区&#xff09; 第14章 文件系统14.1 了解文件系统14.2 了解硬链接14.3 创建文件系统14.4 挂载文件系统14.5 设置永久挂载14.6 查找文件14.7 find的用法 第15章 逻辑卷管理15…

QWidget|QFrame设置背景透明且可以带有边框颜色

QWidget|QFrame设置背景透明且可以带有边框颜色 《Qt》part 6 QSS Qt样式表——界面美化1【QT】QSS美化——基础知识Chapter1 QWidget|QFrame设置背景透明且可以带有边框颜色参考链接Chapter2 Qt 中设置窗体(QWidget)透明度的几种方法1. 设置窗体的背景色2. 使用函数 Chapter3 …

使用端口转发来访问集群中的应用

使用端口转发来访问集群中的应用 个人k8s集群信息&#xff1a; rootk8s-master:~# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIM…

【源码】智慧导诊系统:告别排队等候,快速预约科室挂号!

去医院看病该挂什么科&#xff1f; 不知道该挂什么科我该问谁&#xff1f; 看到茫茫的排队就诊人群&#xff0c;心里绝望怎么办&#xff1f; 医院内部结构复杂&#xff0c;我要去的科室在哪里&#xff1f; 所有人都去咨询前台&#xff0c;前台压力大&#xff0c;患者也只 …

【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】

文章目录 Trace32 CMM 概述1.1 Trace32 系统命令 SYStem1.1.1 Trace32 SYStem.CONFIG1.1.2 SYStem.MemAccess1.1.3 SYStem.Mode1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic1.1.3.2 SRST- Resets the CPU core and peripherals 1.2 Trace32 …

原生mysql与mybatis执行update语句的差异

在做一个解除绑定的接口中&#xff0c;发现了这个一个问题&#xff1a; 连续对接口进行测试&#xff0c;发现一直fan返回解除成功&#xff0c;但是逻辑上应该是解除之后&#xff0c;在解除它后就应该回显已解除绑定才对 就一直找原因&#xff0c;sql中使用的是mybatis的…

常用的主流音乐编曲软件有哪些?

FL Studio是一款备受音乐人喜爱的超强编曲软件。最新的FL Studio版本将所有音频形式都视为采样&#xff0c;使得它在各个领域都有出色的表现。该软件操作简单&#xff0c;界面友好&#xff0c;非常适合新手全面学习和使用。此外&#xff0c;FL Studio完美支持Windows和Mac操作系…

内存-虚拟地址到物理内存地址转换

虚拟地址的位数 [rootnew ~]# cat /proc/cpuinfo | grep virtu | tail -1 address sizes : 46 bits physical, 48 bits virtual 高性能C之虚拟内存_哔哩哔哩_bilibili 第零层&#xff0c;每一项是4KB 512个4KB是2MB&#xff0c;第一层&#xff0c;每一项是1GB 512个2MB是…

✔ ★【备战实习(面经+项目+算法)】 10.27学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

CVE-2022-32991靶场复现

靶场环境&#xff1a; 题目提示了该CMS的welcome.php中存在SQL注入攻击。 CVE官方给出的提示&#xff1a; welcome.php页面存在SQL注入&#xff0c;并且这个参数是eid 打开靶场环境&#xff1a; 页面是一个登陆注册的界面 用户注册&#xff1a; 1 010.com 123456 123456 点击Re…

多线程---认识线程

文章目录 什么是进程&#xff1f;如何管理进程&#xff1f;认识PCB了解进程调度的过程虚拟地址空间 什么是线程&#xff1f;进程 VS 线程Thread类的属性和方法Thread类的属性Thread类的方法构造方法普通方法 线程的状态 什么是进程&#xff1f; 进程&#xff0c;也叫做“任务”…