react-router-dom v6的变化

2023-11-03

react-router-dom v6

原文地址

1、useNavigate替代useHistory

在v6版本useHistory被新hookuseNavigate代替,用法也发生的很大的变化

//v5
import {useHistory} from 'react-router-dom'

function ChangePage(){
    const history = useHistory()
    const handleClick = () => {
        history.push('/home')
        //history.replace('/home')
        //history.go(-1)
        //history.goback()
        //history.goForward()
    }
    return(
        <button onClick={handleClick}>跳转</button>
    )
}

变为:

//v6
import {useNavigate} from 'react-router-dom'

function ChangePage(){
    const navigate = useNavigate()
    const handleClick = () => {
        navigate('/home')
        //navigate('/home', {replace: true}
        //navigate(-1) 后退
        //navigate(1) 前进
    }
    return(
        <button onClick={handleClick}>跳转</button>
    )
}

2、element替代component

//v5
<Route path='/' component={Home} />
//v6
<Route path='/' element={<Home />} />

3、useRoutes的使用

v6版本中引入了useRoutes来集中式管理路由配置

不同于v5版本需要安装react-router-config

v6版本我们可以直接从react-router-dom中解构导入useRoutes

import { useRoutes } from 'react-router-dom'

useRoutes可以直接根据JavaScript的对象数组生成路由

需要注意的是useRoutes必须使用在BrowserRouterHashRotuerRouter

import { useRoutes } from 'react-router-dom'
import Login from '../pages/Login'
import Home from '../pages/Home'

const AppRoutes = () => {
  let element = useRoutes([
    {
      path: '/',
      element: <Login />,
    },
    {
      path: '/home',
      element: <Home />,
    }
  ])
  return element
}

export default AppRoutes
import React from 'react'
import { HashRouter as Router } from 'react-router-dom'
import AppRoutes from './routes/AppRoutes'

function App() {
  return (
    <Router>
      <AppRoutes />
    </Router>
  )
}

export default App

4、Routes替代Switch

v6版本引入了Routes组件来代替Switch组件,功能比后者要更加强大。

//v5
<Switch>
	<Route path='/' component={Home} />
</Switch>

//v6
<Routes>
    <Route path='/' element={<Home/>} />
</Routes>

在v5版本中的Switch是按照最先匹配的路由来更新页面,但是Routes却是采用最优匹配的,这可以避免我们再开发中因为路由的匹配顺序而绞尽脑汁甚至不断修改。

所以而且v6版本我们不再需要为Route添加exact精准匹配了。

5、嵌套路由,OutLet组件

在v5版本中,我们使用嵌套路由需要明确定义。

function App() {
    return(
    	<Router>
           <div>
             <Route exact path="/" component={Login} />
             <Route path="/home" component={Home} />
           </div>
        </Router>
    )
}
function Home() {
    return(
    	<div>
        	home
            <div>
            	<Route path="/home/main" component={Main} />
            </div>
        </div>
    )
}

v6版本中,提供<OutLet/>组件为特定路由呈现任何匹配的子元素

<OutLet/>不需要任何参数,只为呈现子路由的输出。

import { OutLet } from 'react-router-dom'
function App() {
	return(
		<Router>
			<Route exact path="/" element={Login} />
			<Route path="/home" element={Home}>
				<Route path="/main" element={Main} />
			</Route>
		</Router>
	)
}
function Home() {
	return(
		<div>
			<OutLet />
		</div>
	)
}

:本博客仅供个人学习,如有错误、侵权敬请指出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react-router-dom v6的变化 的相关文章

随机推荐

  • 使用PHP生成Excel文件并通过邮件发送

    需求 每周一自动检测一个月内即将过期的用户 生成excel2007文件 xlsx文件 并发送给指定的人员 做成一个脚本 使用定时任务即可解决 脚本分解为两步 生成Excel 发送邮件 一 生成Excel 使用简单的更改文件头 header
  • Java入门(6)——集合、基本数据类型和引用数据类型的相互转换

    集合 1 HashMap gt 类 概述 通过key可以找到value key就是键 values就是值 俗称键值对 特点 无序的 值可以重复 键不可以重复的 如果重复了 值就会覆盖 回顾 10 int num 10 jack String
  • Python基础内容:适合刚入门的朋友看的教程

    1 基本概念 1 1 四种类型 python中数有四种类型 整数 长整数 浮点数和复数 整数 如 1 长整数 是比较大的整数 浮点数 如 1 23 3E 2 复数 如 1 2 j 1 1 2 2j 1 2 字符串 字符串 字符的序列 pyt
  • ResNet50模型学习笔记

    ResNet的各种网络结构图如下图所示 ResNet的层级结构 Layer gt Block gt Stage gt Network Layer是最小的单位 ResNet50代表有50层 Block由两层或者三层conv层叠加而成 50层以
  • JavaWeb-form传值(从一个jsp页面传数据到另一个jsp页面)

    第一个页面 login jsp
  • OkHttpClient获取文件并下载

    需要调用第三方接口获取文件 本地通过网页直接下载 public Result doExcelExport String repoId HttpServletResponse response try if StringUtils isBla
  • nginx配置指南

    nginx conf配置 找到Nginx的安装目录下的nginx conf文件 该文件负责Nginx的基础功能配置 配置文件概述 Nginx的主配置文件 conf nginx conf 按以下结构组织 配置块 功能描述 全局块 与Nginx
  • 行为型设计模式之策略模式【设计模式系列】

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 设计模式系列 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now everythin
  • C++基础---递归函数

    1 递归函数 1 1 递归函数的定义 递归函数 即在函数体中出现调用自身的函数 即函数Func Type a 直接或间接调用函数本身 递归函数 在数学上 关于递归函数的定义如下 对于某一函数f x 其定义域是集合A 那么若对于A集合中的某一
  • centos安装常见软件

    安装tar yum install y tar 安装zip yum install unzip y 安装上传 yum y install lrzsz y 安装git 方式一 yum install git y 方式二 开发会用的软件 yum
  • STM32F1应用DMA——串口收发不定长数据

    STM32F1应用DMA 串口收发不定长数据 使用STM32自带DMA传输数据 可以减轻CPU负担 只需设置一些参数即可发送想要发送的数据 以下是STM32F1系列芯片测试过的部分代码 可实现DMA串口收发数据 下图来自STM32官网的手册
  • webrtc中peerconnection_client生成vs工程文件

    下面是将peerconnection client从整个webrtc工程文件中分离出来的过程记录 一 webrtc项目的本地编译 生成Ninja配置文件 gn gen target x64 args is clang false use l
  • Matplotlib绘制动图以及绘制平滑曲线

    文章目录 绘制动图 FuncAnimation 方法 ArtistAnimation 方法 绘制平滑曲线 使用 scipy ndimage gaussian filter1d 高斯核类绘制平滑曲线 使用 scipy interpolate
  • python怎么做多个矩阵_用Python程序添加两个矩阵

    用Python程序添加两个矩阵 在此程序中 您将学习使用嵌套循环和Next列表理解来添加两个矩阵 并显示它们 要理解此示例 您应该了解以下Python编程主题 在Python中 我们可以将矩阵实现为嵌套列表 列表内的列表 我们可以将每个元素
  • openmpi编译安装

    概念原理 OpenMPI是一个免费的 开源的MPI实现 兼容MPI 1和MPI 2标准 OpenMPI由开源社区开发维护 支持大多数类型的HPC平台 并具有很高的性能 功能描述 OpenMPI借助TCP IP网络连接的多台计算机 以此分发数
  • 经典多模态模型

    整点传统多模态学习 下游任务 在讲模型之前 我们先说说 传统多模态任务是下游任务 图文检索 Image Text Retrieval 里面包含图像到文本检索 文本到图像检索 给定一个数据库 搜索到ground truth的图像文本对 因为是
  • NDIS网络数据监控程序NDISMonitor(2)-----驱动与应用的中间层NdisHook

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 本工程是驱动vpcknt的一个封闭层而已 比较简单 一 导出的API接口分析 1 Start 1 加载驱动vpcknt sys vpckn
  • List转换String,String转List的几种方法

    一 List转String的方法 将一个Java集合List转换为String方法比较多 可以使用String join StringBuilder Stream流等方法 下面举几个常用的示例 1 使用String join 方法 impo
  • c51语言的指针分几类,- 第五课 C51变量

    sfr P1 0x90 这里没有使用预定义文件 sbit P1 0 P1 0 而是自己定义特殊寄存器 sbit P1 7 0x90 7 之前我们使用的预定义文件其实就是这个作用 sbit P1 1 0x91 这里分别定义P1端口和P10 P
  • react-router-dom v6的变化

    react router dom v6 原文地址 1 useNavigate替代useHistory 在v6版本useHistory被新hookuseNavigate代替 用法也发生的很大的变化 v5 import useHistory f