React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

news2024/12/31 6:08:55

1.路由安装(默认安装最新版本6.15.0)

npm i react-router-dom

2.路由模式

有常用两种路由模式可选:HashRouter 和 BrowserRouter。

①HashRouter:URL中采用的是hash(#)部分去创建路由。

②BrowserRouter:URL采用真实的URL资源,无#。

3.常用路由组件和hooks

注意:

v5版本路由是模糊匹配,需加关键字exact和Switch实现精准匹配。

v6版本路由算法改变,默认就是精确匹配(匹配完整路径),如果想匹配某一部分,在路径后加"/*"

例如:

<Route path="/home/:id" element={<Home />}/>
则匹配
path = "/home/123"
path="/home/abc"
<Route path="/citylist/*" element={<CityList />}/>
则匹配
path="/citylist"
path="/citylist/123/abc"

在v6中Route能够找到最优路径,并不需要像v5讲究先后顺序。

4.<Link/><NavLink/>类似于a标签

老版本v5中NavLink可以设置激活状态时的样式,他有一个activeClassName或activeStyle。

新版本v6中NavLink可以移除了老版本activeClassName或activeStyle,他有一个箭头函数,接收isActive,<Link/>可以跳转但是不能使用以下方式激活样式

import React from 'react'
import "./App.css"
import {NavLink}from "react-router-dom"

function App() {
  return (
    <div className="App">
{/* 自动会传入isActive,要解构出来,判断是否选中,如果选中追加样式*/}
<NavLink className={({isActive})=>isActive?"active":""} to="/citylist">去城市列表</NavLink>
<NavLink className={({isActive})=>isActive?"active":""} to="/home">去首页</NavLink>
   
//style书写方式
<NavLink style={({isActive})=>{
return {
color:isActive?"red":"black"
}
} to="/home">去首页</NavLink>
    </div>
  );
}

export default App;

效果如下:

5.新老版本重定向

老版本:<Redirect to="/login" />

新版本:使用Navigate 进行重定向<Route path="/" element={<Navigate to="/home" />/>,相当于push,会有历史记录,如果<Route path="/" replace element={<Navigate to="/home" />/>使用replace,无历史记录。

6.路由出口与占位(<Outlet/>),不做过多赘述。

7.useRoutes声明式的路由

①.index.js文件引入并使用

import React from 'react';
import ReactDOM from 'react-dom/client';
// import './index.css';

import App from './App';
// 1.引入BrowserRouter路由模式
import {BrowserRouter  } from 'react-router-dom'

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    {/* 2.使用 */}
    <BrowserRouter >
    <App />
    </BrowserRouter >
  </React.StrictMode>
);

②router->index.js文件

const OutRoutes=()=>{
    const routes=useRoutes([
        {
            path:"/home",
            element:<Home/>,
            // home组件内使用Outlet添加出口,以显示子组件内容,
            // 注意:子组件不需加绝对路径"/",否则会报错,使用相对路径
            children:[
                {
                    path:"detail",
                    element:<Detail/>
                }
            ]  
        },
        {
            path:"/citylist",
            element:<CityList/>
        },
//* 404页面,匹配不符合路径
        {
            path:"*",
            element:<NotFound/>
        }
    ])
    return routes
}

export default OutRoutes

③App.js文件


import React, { Suspense } from 'react'
import IndexRouter from "./router"
function App() {
  return (
    <div className="App">
 {/* 使用路由懒加载,渲染页面的时候可能会有延迟,但使用了Suspense之后,可优化交互。 */}
      {/* 注意:<IndexRouter></IndexRouter>要用标签的形式,因为他是组件 */}
    <Suspense><IndexRouter></IndexRouter></Suspense>
    </div>
  );
}

export default App;

8.编程式的路由

老版本:

类组件:this.props.history.push("/home")

函数组件:useHistory()

新版本:

useNavigate()

import React from 'react'
import { Link,useNavigate } from 'react-router-dom'

export default function CityList() {
    const naviate = useNavigate();
   const jump=()=>{
        naviate("/home/detail");//push的方式
        // naviate("/home/detail",{replace:true})replace方式
    }
    return (
        <div>
            城市列表
                <Link to="/home">去home页面</Link>
                <button onClick={()=>jump()}>跳转</button> 
        </div>
    )
}

9.路由跳转,参数携带以及获取路由参数的三种方式

// push跳转的三种携带参数方式
// 1.携带params参数
Navigate(`/home/c1/${id}/${title}`)  ==>     useParams()
//2.携带search参数
Navigate(`/home/c1?id=${id}&title=${title}`) ==> useSearchParams()
//3.携带state参数
Navigate("/home/c1",{state:{id,title}}) ==>  useLocation()

//replace跳转的三种携带参数方式
// 1.携带params参数
Navigate(`/home/c1/${id}/${title}`,{replace:true})
// 2.携带search参数
Navigate(`/home/c1?id=${id}&title=${title}`,{replace:true})
//3.携带state参数
Navigate("/home/c1",{state:{id,title},replace:true})

注意:新版本类组件如果想获取以上三种获取参数的方式,要么使用函数组件,要么使用高阶组件。

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

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

相关文章

接口自动化测试系列-excel管理测试用例

代码源码&#xff1a; 框架结构 核心代码 excel数据处理 from configureUtil.LogUtil import getlog logger getlog(targetNameHandleData) import xlrd from openpyxl import load_workbook,workbook from openpyxl.styles import Font, colors import openpyxl import o…

Docker-基础命令使用

文章目录 前言命令帮助命令执行示意图docker rundocker psdocker inspectdocker execdocker attachdocker stopdocker startdocker topdocker rmdocker prune参考说明 前言 本文主要介绍Docker基础命令的使用方法。 命令帮助 Docker命令获取帮助方法 # docker -h Flag shor…

网易低代码引擎Tango正式开源

一、Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架,借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建。Tango 低代码设计器直接读取前端项目的源代码,并以源代码为中心,执行和渲染前端视图,并为用户提供低代码可视化搭建能力,…

【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用

ref和$refs获取dom元素 为什么会有 ref 和 $refs&#xff1f; 因为在vue页面中使用dom查找元素&#xff0c;不管你是不是在子组件里面查找&#xff0c;查找的都是整个页面的元素&#xff0c;如果你想查找单独组件里面的元素是不容易实现的&#xff0c;除非把每个组件的class写…

亚马逊云科技通过生成式AI,帮助清华RIOS加速计算和分析的处理效率

近日&#xff0c;硬件创建平台Efabless宣布了其第一届“生成式AI开源芯片设计挑战赛”&#xff08;AI Generated Open-Source Silicon Design Challenge&#xff09;的评选结果。来自清华大学的RISC-V国际开源实验室&#xff08;RIOS Lab&#xff09;团队基于亚马逊云科技云上科…

npm install依赖冲突解决办法

今天npm的时候发现报错&#xff0c;原来是依赖冲突了 npm后面加上这个指令就可以顺利的安装依赖了。问题主因就是不同开发用了不同版本node导致依赖版本不同&#xff0c;出现了成功冲突&#xff0c;这是段指令&#xff1b;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但…

桌面平台层安全随手记录

声明 本文是学习桌面云安全技术要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 桌面平台层安全 桌面接入安全 用户标识 一般要求 本项要求包括&#xff1a; a) 系统应为用户提供唯一的身份标识&#xff0c;同时将用户的身份标识与该用户的所…

FPGA/IC秋招面试题 1(解析版)

分享个人觉得遇到还不错的题&#xff0c;后续有会继续补充。。。 以下题目均来自网络平台&#xff0c;用于学习交流如有侵权立马删除!!! 1. Verilog语言中&#xff0c;下面哪些语句不可被综合() A. #delay语句 B. initial语句 C. always语句 D. 用gen…

软件测试师之数的表示

目录 一、数的进制(1)十进制&#xff1a;D(2)二进制&#xff1a;B(3)十六进制&#xff1a;H(4)八进制&#xff1a;O/Q 二、其他进制转十进制(1)二进制转十进制(2)十六进制转十进制(3)八进制转十进制 三、二进制与十六进制/八进制进行转换四、考法 一、数的进制 (1)十进制&…

怎么把pdf转换成高清图片?

怎么把pdf转换成高清图片&#xff1f;最近&#xff0c;我的同事遇到了一个问题&#xff0c;现在她需要将一些pdf文件转换成高清的图片&#xff0c;这件事情让让她感到非常无助&#xff0c;因为她非常着急需要将这些文件转换为图片格式&#xff0c;以便更好的在今后的工作中进行…

AJAX学习笔记5同步与异步理解

AJAX学习笔记4解决乱码问题_biubiubiu0706的博客-CSDN博客 示例 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>演示AJAX同步和异步</title> </head> <body> <script…

5个强大的Java分布式缓存框架推荐

在开发中大型Java软件项目时&#xff0c;很多Java架构师都会遇到数据库读写瓶颈&#xff0c;如果你在系统架构时并没有将缓存策略考虑进去&#xff0c;或者并没有选择更优的缓存策略&#xff0c;那么到时候重构起来将会是一个噩梦。 在开发中大型Java软件项目时&#xff0c;很…

【LeetCode-面试经典150题-day21】

目录 120.三角形最小路径和 64.最小路径和 63.不同路径Ⅱ 5.最长回文子串 120.三角形最小路径和 题意&#xff1a; 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标…

【项目 计网10】4.28 poll API介绍及代码编写

文章目录 4.28 poll API介绍及代码编写代码实现 4.28 poll API介绍及代码编写 #include <poll.h> struct pollfd{int fd;//委托内核检测的文件描述符short events;//委托内核检测文件描述符的什么事件short revents;//文件描述符实际发生的事件 }; int poll(struct poll…

【ARM CoreLink CCI-400 控制器简介】

文章目录 CCI-400 介绍 CCI-400 介绍 CCI&#xff08;Cache Coherent Interconnect&#xff09;是ARM 中 的Cache一致性控制器。 CCI-400 将 Interconnect 和coherency 功能结合到一个模块中。它支持多达两个ACE master 点的interface&#xff0c;例如&#xff1a; Cortex-A…

Verilog零基础入门(边看边练与测试仿真)-笔记

文章目录 第一讲第二讲第三讲第四讲 第一讲 1、testbench 没有端口&#xff0c;所以没括号 2、testbench 输入端 之后要变动 所以定义为reg 3、#10 &#xff1a;过10个时间单位 &#xff1b;’timescale 1ns/10ps 即 1ns 的时间单位 10ps的时间精度 4、reg 型变量赋值的时候 用…

若依新建模块

下面介绍如何在若依框架下新建一个子模块 第一步&#xff1a; 如图操作&#xff1a; 1. 2. 3. 4.在刚建立的子模块的pom.xml文件添加通用工具依赖 代码&#xff1a; <dependencies> <!-- 导入通用工具--><dependency><groupId>com.rchuing&l…

C语言文本为什么不包括库函数和预处理命令

C语言的文本不包括库函数和预处理命令 是因为库函数和预处理命令并不是C语言本身的一部分&#xff0c; 它们是由C语言标准库和预处理器提供的功能。 C语言标准库是一组预定义的函数和常量&#xff0c; 用于提供常见的功能&#xff0c;如输入输出、字符串处理、数学计算等。 …

【深入解析spring cloud gateway】06 gateway源码简要分析

上一节做了一个很简单的示例&#xff0c;微服务通过注册到eureka上&#xff0c;然后网关通过服务发现访问到对应的微服务。本节将简单地对整个gateway请求转发过程做一个简单的分析。 一、核心流程 主要流程&#xff1a; Gateway Client向 Spring Cloud Gateway 发送请求请求…

普通用户使用spark的client无法更新Ranger策略

普通用户使用spark的client无法更新Ranger策略 报错图片&#xff1a; WARN org.apache.ranger.admin.client.RangerAdminRESTClient: Error getting Roles. secureModetrue, usercaojianxiangUCDIPA.VIATRIS.CC (auth:KERBEROS)&#xff0c;responsef"httpStatusCode&quo…