react-router v6对比react-router v5
简述:
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> </>
) }
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的更多相关文章
- React学习(3)——Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 文档中介绍 ...
- React 实践记录 03 React router
Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...
- Vue.js与React的全面对比
Vue与React的对比 Vue.js与React.js从某些反面来说很相似,通过两个框架的学习,有时候对一些用法会有一点思考,为加深学习的思索,特翻阅了两个文档,从以下各方面进行了对比,加深了对这两 ...
- 对比React Native、dcloud、LuaView三个框架技术(内部)
转载自:http://www.jianshu.com/p/ee1cdb33db8d主要对比React Native和5+SDK(就是dcloud的SDK)两个: 开发语言:三个都是用其他语言来统一开发 ...
- 前端三大主流框架的对比React、Vue、Angular
前端三大主流框架的对比React.Vue.Angular React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站, 并于 2013年 5 月开源.React 拥有较高的 ...
- 探索 Redux4.0 版本迭代 论基础谈展望(对比 React context)
Redux 在几天前(2018.04.18)发布了新版本,6 commits 被合入 master.从诞生起,到如今 4.0 版本,Redux 保持了使用层面的平滑过渡.同时前不久, React 也从 ...
- composition api和react hooks的对比
一. 我的走位: 保持中立 1. 各有各的好处, 谁也别说谁 2. 一个东西带来的好处, 相应的副作用肯定也有, 人无完人 二 . vue3 的composition api 和 rea ...
- react与jQuery对比,有空的时候再翻译一下
参考资料:http://reactfordesigners.com/labs/reactjs-introduction-for-people-who-know-just-enough-jquery-t ...
- [React] 02 - Intro: why react and its design pattern
为啥使用React,给我个理由 过去 需要手动更新DOM.费力地记录每一个状态:既不具备扩展性,又很难加入新的功能,就算可以,也是有着冒着很大的风险. 不过,使用这种开发方式很难打造出极佳的用户体验. ...
- react基础学习和react服务端渲染框架next.js踩坑
说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...
随机推荐
- python---输出函数运行时间的装饰器
""" 装饰器: 不改变原函数的调用方式和函数的前提下, 增加额外的功能, 其本质就是一个闭包 ---输出函数的运行时间 """ impor ...
- 用asmlib方式创建oracle集群ASM磁盘(oracleasm)
创建asm磁盘的几种方式 创建asm方式很多主要有以下几种 1.Faking方式 2.裸设备方式 3.udev方式(它下面有两种方式) 3.1 uuid方式 3.2 raw方式(裸设备方式) 4.as ...
- Postman大势已去
作为一名前端,日常开发过程中除了写业务代码,前后端联调更是重要的一环.但这一环却往往是整个开发中最繁琐也最累人的一环.任谁都想早点下班,然而提升联调效率并不是个纯技术相关的问题,而是需要有良好工作流程 ...
- Linux 开启远程访问
系统:Ubuntu16.0 虚拟机 问题:Windows访问Ubun被拒绝 解决方法: 1.先检测是否安装SSH服务 1 sudo apt-get install ssh 2.编辑ssh配置文件 1 ...
- 数据结构 - AVL 树
简介 基本概念 AVL 树是最早被发明的自平衡的二叉查找树,在 AVL 树中,任意结点的两个子树的高度最大差别为 1,所以它也被称为高度平衡树,其本质仍然是一颗二叉查找树. 结合二叉查找树,AVL 树 ...
- 使用aspnetcore前后端分离开发,你一定要知道这个
前言 用过Vue单页面应用开发的,一定都知道Vue-router这个路由组件,它支持hash和history两种模式. HTML5 History 模式 vue-router 默认 hash 模式 - ...
- 解决anaconda3打开不了闪退
今天想新创个环境,结果发现创不起,而且anaconda居然也进不去了. 然后尝试了网上各种方法,修改c:user/用户/用户名目录下的.condarc文件,镜像源,包括重装都没用. 最后 把.cond ...
- python学习-Day7
目录 作业讲解 数据类型内置方法2 字符串(str) 列表(list) 类型转换 内置方法 索引取值 切片操作 步长 统计列表中元素的个数 成员运算 (in和not in) 列表添加元素的方式* 删除 ...
- sql索引优化思路
[开发]SQL优化思路(以oracle为例) powered by wanglifeng https://www.cnblogs.com/wanglifeng717 单表查询的优化思路 单表查询是最简 ...
- 重修 Slope Trick(看这篇绝对够!)
Slope Trick 算法存在十余载了,但是我没有找到多少拍手叫好的讲解 blog,所以凭借本人粗拙的理解来写这篇文章. 本文除标明外所有图片均为本人手绘(若丑见谅),画图真的不容易啊 qwq(无耻 ...