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 路由配置 :
4. react-router v6 路由配置 :
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 (
<>
history.push('/')}>withRouter跳转55555{match.params.id}
history.goBack()}>返回{match.params.id}
history.goForward()}>前进{match.params.id}
>
)
}
}
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 (
<>
>
)
}
3. Link跳转页面传值通信 引入 import { Link } from 'react-router-dom'
import { Button } from 'antd';
import {Link } from 'react-router-dom';
export const HomePage = () => {return (
{/* 2. Link组件跳转页面 */}
)
}
二 . 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 (
)
}
2. LInk
import React from "react";
import { Link } from 'react-router-dom'
export const ProductImage: React.FC = ({id=3, name }) => {
return (
xxxxxxx
);
}