当前位置: 首页 > news >正文

react路由5和6新增及区别

React Router 6 相比 React Router 5 进行了一些重要的升级和改动,主要包括 API 的简化、性能优化和新的特性。以下是主要的区别和新增功能:


1. 路由声明方式变化

React Router 5:

import { BrowserRouter as Router, Route, Switch } from "react-router-dom";

<Router>
  <Switch>
    <Route path="/home" component={Home} />
    <Route path="/about" component={About} />
  </Switch>
</Router>;

React Router 6:

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";

<Router>
  <Routes>
    <Route path="/home" element={<Home />} />
    <Route path="/about" element={<About />} />
  </Routes>
</Router>;

区别:

  • SwitchRoutes 取代,Route 需要用 element 传递组件,而不是 component

2. 默认启用嵌套路由

React Router 5:

<Router>
  <Route path="/dashboard" component={Dashboard} />
  <Route path="/dashboard/profile" component={Profile} />
</Router>;

React Router 6(嵌套路由):

<Routes>
  <Route path="/dashboard" element={<Dashboard />}>
    <Route path="profile" element={<Profile />} />
  </Route>
</Routes>;

区别:

  • 6 版本支持嵌套路由,不需要手动拼接路径(/dashboard/profile),而是直接写 profile,这样 Profile 组件会在 Dashboard 组件中渲染 Outlet

3. useNavigate 取代 useHistory

React Router 5:

import { useHistory } from "react-router-dom";

const history = useHistory();
history.push("/home");

React Router 6:

import { useNavigate } from "react-router-dom";

const navigate = useNavigate();
navigate("/home");

区别:

  • useHistoryuseNavigate 取代,push 变成了 navigate

4. 动态参数 match 变化

React Router 5:

<Route path="/user/:id" component={User} />
const { id } = match.params;

React Router 6:

<Route path="/user/:id" element={<User />} />
const { id } = useParams();

区别:

  • match.paramsuseParams() 取代,直接在组件内获取动态参数。

5. useRoutes 方式配置路由

React Router 6 新增 useRoutes(),允许用数组方式定义路由:

import { useRoutes } from "react-router-dom";

const routes = [
  { path: "/home", element: <Home /> },
  { path: "/about", element: <About /> },
];

const App = () => {
  return useRoutes(routes);
};

优点:

  • 让路由更符合组件化思想,避免 JSX 层级嵌套过深。

6. redirect 变更为 Navigate

React Router 5:

import { Redirect } from "react-router-dom";

<Route path="/" exact>
  <Redirect to="/home" />
</Route>;

React Router 6:

import { Navigate } from "react-router-dom";

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

区别:

  • RedirectNavigate 取代,必须用 element 传递。

7. exact 默认行为

React Router 6 默认匹配完整路径,不需要 exact

React Router 5:

<Route path="/home" exact component={Home} />

React Router 6:

<Route path="/home" element={<Home />} />

总结:

特性React Router 5React Router 6
路由声明<Switch><Routes>
组件传递component={}element={<Component />}
嵌套路由需要完整路径直接嵌套 <Route>
页面跳转useHistory().push()useNavigate()
获取参数match.paramsuseParams()
重定向<Redirect><Navigate>
exact 关键词需要 exact默认精确匹配
路由数组不支持useRoutes()

如果你的项目是 React Router 5,升级到 6 可能需要修改这些 API,但整体结构更简洁,代码可读性更好。

相关文章:

  • 【论文阅读】FairCLIP - 医疗视觉语言学习中的公平性提升
  • 基于香橙派 KunpengPro学习CANN(2)——Ascend Extension for PyTorch 配置与安装
  • 深度学习框架PyTorch——从入门到精通(5)自动微分
  • Web3游戏行业报告
  • XML转义符详解:如何在XML中正确处理特殊字符
  • Vue3项目匹配PC端和移动端---两套组件
  • 生成式人工智能大模型备案政策深度解读
  • 请大家推荐一款免费的网站模版。
  • 【C++】多参数构造函数使用explict的情形
  • LSM-Tree(Log-Structured Merge-Tree)详解
  • Java 单例模式与线程安全
  • Electron使用WebAssembly实现CRC-16 MAXIM校验
  • jmeter环境搭建及使用
  • 【第9章】亿级电商平台订单系统-整体技术架构设计
  • 【华为OD-E卷 -123 判断一组不等式是否满足约束并输出最大差 100分(python、java、c++、js、c)】
  • AI技术学习笔记系列003:`liger_kernel`、`flashattn2` 和 `unsloth` 介绍
  • 第52届医疗器械博览会盛装启幕,开启AI 赋能驱动医疗装备“新视界”
  • 【k8s004】 Docker 打包 K8s镜像
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(67)混元无极算素数 - 埃拉托斯特尼筛法
  • 阿里云服务器环境部署 一
  • 三部门印发《2025年深入推进IPv6规模部署和应用工作要点》
  • 破题“省会担当”,南京如何走好自己的路?
  • 张永宁任福建宁德市委书记
  • 印尼总统20年来首次访泰:建立战略伙伴关系,加强打击网络诈骗等合作
  • 年内首次存款利率下调启动:3年期、5年期均下调0.25个百分点
  • 8000余万元黄金投入研发后“不知去向”,咋回事?