React-router v5和v6的区别对比

  • Post author:
  • Post category:其他


以下是两个版本之间的区别:

一、首先是注册路由的时候v5的Switch改为了Routes

v5,代码如下:

 import {Route, Switch} from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Switch>
        ......
        ......
    </Switch>
 
 </div>

v6,代码如下:

 import {Route, Routes } from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Routes >
        ......
        ......
    </Routes>
 
 </div>

二、v6不再支持用Route标签包裹子组件,可以直接使用element属性 也不需要

v5,代码如下:

 import {Route, Switch} from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Switch>
        <Route path="/about">
            <About />
        </Route>
    </Switch>
 
 </div>

v6,代码如下:

 import {Route, Routes } from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Routes >
        <Route path="/about" element={<About />} />
    </Routes>
 
 </div>

如果v5不用包裹子组件的形式写的话他的属性是component,下面代码有体现到。

三、v6中也不需要exact属性

exact在v5中起到的作用是精准匹配的作用,如果不写的话,

那么



path='/'



也会匹配



'/about'







'/home'



导致的结果就是下面两个路由就没用了

在v6中由于v6 内部算法改变,它默认就是匹配完整路径。

v5,代码如下:

 import {Route, Switch} from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Switch>
        <Route exact path="/"  component={ Home } >
          </Route>
    </Switch>
</div>

v6,代码如下:

 import {Route, Routes } from 'react-router-dom' //引入react-router
 
<div>
        {/* 注册路由(编写路由链接) */}
    <Routes >
        <Route path="/" element={<Home />} />
    </Routes>
 
 </div>

四、v6 中,Route 先后顺序不再重要,它能够自动找出最优匹配路径

五、在v6中移除了NavLink中的actionclassName的这个属性

actionclassName这个属性是点击对应元素改变为对应的样式

在v6中可以使用三元运算符的方式实现这个功能

<NavLink className={navData=>navData.isActive?class.active : ""}

六、在v6中将Redirect改为Navigate

它当匹配不到路由时,需要使用Redirect做重定向,跳转到我们定义的组件(页面)中

v5,代码如下

在页面中直接写入重定向的路径

<Redirect to="/home/" />

v6,代码如下:

<Route path="/" element ={<Navigate replace to="/home" />} />

七、v6 嵌套路由改为相对匹配,不再像 v5 那样必须提供完整路径。

八、新增Outelt组件

此组件是一个占位符,告诉 React Router 嵌套的内容应该放到哪里。

<Link to="/home2">子路由</Link>
<Outlet></Outlet>

九、v6 用useNavigate实现编程式导航,不再使用useHistory

代码如下:

import {useNavigate} from "react-router-dom";
const navigate = useNavigate();
navigate("/home");

是除此之外,还可以使用navigate

(-1)

后退到前一页,使用navigate

-2)

后退到前一页的前一页, navigate

(1)

前向导航,依此类推

十、v6 目前没有prompt组件阻止不期望的导航。

如果在 v6 中要实现相应的功能,必须自己想办法,这可能是目前 v5 唯一的优势。



版权声明:本文为weixin_57935165原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。