简述: 

    1. react-router v6 原生支持typeScript ; 安装方法 npm install react-router-dom@6

    2. react-router v5 原生不支持typeScript,  需要安装 @types/react-router-dom 来支持ts ;  安装方法  npm install react-router-dom@5

    3. react-router v5 路由配置 : <BrowserRouter /> + <Switch /> + <Route />

    

    4. react-router v6 路由配置 :   <BrowserRouter /> + <Routes/ > + <Route />

    5. react-router v5和react-router v6区别:  官方文档 v5=>v6的变化

常规简单路由配置Demo图:

  1. react-router v5:   

     通过props注入来获取路由状态;   

     类组件: (HOC高阶组件) withRouter==>history, location, match;    可以使任意组件都具备这些属性

     函数式组件:  useHistory, useLocation, useParams, useRouteMatch  来搞定

  

  2. react-router v6: 

     因为完全倒向函数式组件;  直接用 hooks就行,useLocation,useParams;    注意 useHistory改成了 useNavigate

 

  

  

拓展: 

一 . react-router v5: 三种常用的跳转   和   获取url参数:  

 1.  HOC 高阶组件  withRouter 跳转传值通信  

import React, { Component } from 'react'

import { withRouter } from 'react-router-dom';
//3. HOC 高阶组件 withRouter 传值通信 export class LoginPage extends Component { render () {
console.log(this.props)
const { history, match, location } = this.props
console.log(match.params) // 获取上个页面的路由参数
console.log(history, match, location)
return (
<>
<h1 onClick={() => history.push('/')}>withRouter跳转55555{match.params.id}</h1>
<h1 onClick={() => history.goBack()}>返回{match.params.id}</h1>
<h1 onClick={() => history.goForward()}>前进{match.params.id}</h1>
</>
)
}
}
export default withRouter(LoginPage)

   

 2.  hooks 跳转页面传值通信   引入  import { useHistory, useLocation, useParams, useRouteMatch } from 'react-router-dom';

import { Button } from 'antd';
import { useHistory, useLocation, useParams, useRouteMatch } from 'react-router-dom'; export const HomePage = (props) => {
const history = useHistory()
const location = useLocation()
const params = useParams()
const routeMatch = useRouteMatch()
console.log(history, location, params, routeMatch)
return (
<>
<div style={{ marginTop: 100 }}>
<Button type="primary" onClick={() => history.push(`login/111`)}>跳转登录</Button>
<Button>跳转注册</Button>
</div> </>
) }
  3. Link跳转页面传值通信   引入  import { Link } from 'react-router-dom'
import { Button } from 'antd';
import {Link } from 'react-router-dom'; export const HomePage = () => {return (
<div style={{ marginTop: 100 }}>
{/* 2. Link组件跳转页面 */}
<Link to={`login/444`}>
<Button type="dashed">Link组件跳转</Button>
</Link>
</div>
)
}

二 . react-router v6: 两种常用的跳转   和   获取url参数: 

 1.  useNavigate

import React from "react";
import styles from './Header.module.css'
import { Button } from 'antd'
import { useParams, useLocation, useNavigate } from "react-router-dom"; export const Header: React.FC = (id=0) => { const navigate = useNavigate() // 进行页面的处理
const location = useLocation() // 当前路径信息,保存当前路由状态
const params = useParams() // 获取url参数
console.log(navigate, location, params)
return (
<div className={styles['App-header']}>
<div className={styles['App-header-box']}>
<Button.Group>
<Button onClick={() => navigate(`/login/${id}`)}>注册</Button>
<Button onClick={() => navigate('/register')}>登录</Button>
</Button.Group>
</div>
</div>
)
}

 2. LInk

import React from "react";
import { Link } from 'react-router-dom' export const ProductImage: React.FC<PropsType> = ({id=3, name }) => {
return (
<Link to={`/detail/${id}`}>
xxxxxxx
</Link>
);
}

react-router v6对比react-router v5的更多相关文章

  1. React学习(3)——Router路由的使用和页面跳转

    React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 文档中介绍 ...

  2. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  3. Vue.js与React的全面对比

    Vue与React的对比 Vue.js与React.js从某些反面来说很相似,通过两个框架的学习,有时候对一些用法会有一点思考,为加深学习的思索,特翻阅了两个文档,从以下各方面进行了对比,加深了对这两 ...

  4. 对比React Native、dcloud、LuaView三个框架技术(内部)

    转载自:http://www.jianshu.com/p/ee1cdb33db8d主要对比React Native和5+SDK(就是dcloud的SDK)两个: 开发语言:三个都是用其他语言来统一开发 ...

  5. 前端三大主流框架的对比React、Vue、Angular

    前端三大主流框架的对比React.Vue.Angular React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站, 并于 2013年 5 月开源.React 拥有较高的 ...

  6. 探索 Redux4.0 版本迭代 论基础谈展望(对比 React context)

    Redux 在几天前(2018.04.18)发布了新版本,6 commits 被合入 master.从诞生起,到如今 4.0 版本,Redux 保持了使用层面的平滑过渡.同时前不久, React 也从 ...

  7. composition api和react hooks的对比

    一.  我的走位:   保持中立 1. 各有各的好处,  谁也别说谁 2. 一个东西带来的好处, 相应的副作用肯定也有, 人无完人 二 .  vue3 的composition api 和   rea ...

  8. react与jQuery对比,有空的时候再翻译一下

    参考资料:http://reactfordesigners.com/labs/reactjs-introduction-for-people-who-know-just-enough-jquery-t ...

  9. [React] 02 - Intro: why react and its design pattern

    为啥使用React,给我个理由 过去 需要手动更新DOM.费力地记录每一个状态:既不具备扩展性,又很难加入新的功能,就算可以,也是有着冒着很大的风险. 不过,使用这种开发方式很难打造出极佳的用户体验. ...

  10. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

随机推荐

  1. Z-blog csrf漏洞学习

    Z-blog csrf 环境搭建 1. 首先我在本地搭了一个z-blog. ​ 思路:csrf并不侧重于哪种功能点,只要检测不规范,就可能利用成功,所以我考虑了一下后台添加管理员的地方. 数据包构造 ...

  2. docker基础容器中bash: vi: command not found问题解决

    安装即可 1.apt-get update 2.apt-get install vim

  3. Pinpoint介绍及docker安装方式

    一.介绍 Pinpoint是用Java编写的大型分布式系统的APM(Application Performance Management应用程序性能管理)工具,受Dapper论文的启发,Pinpoin ...

  4. Codeforces Round #767 (Div. 2)——B. GCD Arrays

    B. GCD Arrays 题源:https://codeforces.com/contest/1629/problem/B 题目大意 给出一段区间[l, r],可以进行操作(把任意两个数拿出来,把他 ...

  5. Jx.Cms开发笔记(四)-改造Card组件

    在Blazor 组件库 BootstrapBlazor 中Card组件介绍中我们说过,如果我们使用了Card组件的IsCollapsible属性设置了可伸缩的话,就只能使用Text属性来设置标题文本, ...

  6. Android四大组件——Activity——Activity数据回传

    既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity.返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据, ...

  7. kubeadm 搭建 K8s

    kubeadm 搭建 K8s 本篇主要记录一下 使用 kubeadm 搭建 k8s 详细过程 ,环境使用 VirtualBox 构建的3台虚拟机 1.环境准备 操作系统:Centos7 (CentOS ...

  8. 小米路由器3G R3G 刷入Breed和OpenWrt 20.02.2 的记录

    小米 R3G 参数 Architecture: MIPS Vendor: Mediatek Bootloader: U-Boot System-On-Chip: MT7621 family CPU/S ...

  9. DFA算法之内容敏感词过滤

    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找. 设我们有一个敏感词库,词酷中的词汇为:我爱你我爱他我爱她我爱你呀我爱他呀我爱她呀我爱她啊 那么就可 ...

  10. [题解] 春荔(cut) | 贪心

    题目大意 有一个长度为 \(n\) 的非负整数序列 \(a_i\),每次可以选择一段区间减去 \(1\),要求选择的区间长度 \(\in[l,r]\),问最少多少次把每个位置减成 \(0\). 不保证 ...