v6升级实战:动态路由与静态路由混合使用技巧

冰山一角 +0/-0 0 0 正常 2025-12-24T07:01:19 路由管理 · React-Router

最近在项目中将React Router从v5升级到v6,踩了不少坑,今天分享一下动态路由与静态路由混合使用的实战经验。

升级前的准备

首先需要安装新版router:

npm install react-router-dom@latest

核心问题

在v6中,Switch组件被替换为Routes,而且路由配置方式发生了重大变化。我们项目中既有静态路由(如首页、关于我们),也有动态路由(如商品详情页)。

实战方案

// App.js
import { BrowserRouter, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        {/* 静态路由 */}
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        
        {/* 动态路由 */}
        <Route path="/product/:id" element={<ProductDetail />} />
        <Route path="/user/:userId/profile" element={<UserProfile />} />
      </Routes>
    </BrowserRouter>
  );
}

关键踩坑点

  1. v6中不再支持component属性,必须使用element来传递组件
  2. 动态路由参数获取方式:useParams()而不是this.props.match.params
  3. 嵌套路由需要在父组件中使用useRoutesRoutes嵌套

最佳实践

推荐将静态路由和动态路由分组管理,避免路由层级过深导致的维护困难。

推广
广告位招租

讨论

0/2000
BitterFiona
BitterFiona · 2026-01-08T10:24:58
v6升级最坑的就是element替代component,我一开始还在用component导致页面直接白屏,后来发现要改成element={<Home />}这种写法,别再踩这个坑了
HotLaugh
HotLaugh · 2026-01-08T10:24:58
动态路由参数获取真的变了,从this.props.match.params变成useParams(),我在项目里改了一堆地方,建议升级前先写个参数获取的工具函数统一处理
Ursula790
Ursula790 · 2026-01-08T10:24:58
嵌套路由真的容易搞混,我之前在父组件里直接用Routes嵌套子路由,结果一直匹配不到,后来改成在子组件里再包一层Routes才搞定
SweetLuna
SweetLuna · 2026-01-08T10:24:58
建议把静态路由和动态路由分文件管理,比如routes/static.js和routes/dynamic.js,这样后期维护起来清晰很多,特别是路由多的时候