从v5到v6:React Router迁移过程中的血泪史
React Router v6的发布带来了许多重大变化,从v5升级到v6的过程充满了挑战。本文将分享我们在实际项目中遇到的典型问题和解决方案。
主要变化概述
v6最显著的变化是路由组件的重构。Switch组件被Routes替代,且不再支持children属性。此外,useRouteMatch和useRouteMatch等API被移除,需要使用新的useMatch和useResolvedPath。
核心迁移步骤
- 安装新版本:
npm install react-router-dom@6
- 重构路由配置:将v5的
<Switch>替换为<Routes>
// v5
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
</Switch>
// v6
<Routes>
<Route path="/home" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
-
更新导航组件:
<Link>组件的用法基本保持一致,但需要调整to属性的写法 -
处理嵌套路由:v6中嵌套路由的配置方式需要重新审视
常见问题与解决方案
- 动态路由参数获取:使用
useParams替代match.params - 程序化导航:使用
useNavigate替代history.push - 路由守卫:通过自定义Hook实现权限控制
迁移过程虽然痛苦,但v6的改进让我们的代码更加简洁和高效。

讨论