v6路由路径匹配规则踩坑:模糊匹配与精确匹配对比
React Router v6在路由匹配机制上做了重要调整,从v5的模糊匹配改为v6的精确匹配,这一变化导致很多开发者在升级时遇到意外问题。
问题现象
在v5中,以下路由配置会匹配到所有以/user开头的路径:
<Route path="/user" component={User} />
<Route path="/user/profile" component={UserProfile} />
但在v6中,需要明确指定精确匹配:
<Route path="/user" element={<User />} />
<Route path="/user/profile" element={<UserProfile />} />
复现步骤
- 创建一个包含嵌套路由的组件结构
- 在父路由设置为
path="/user"但不添加/* - 访问
/user/profile路径时会发现无法正确匹配到子路由
解决方案
使用useRoutes或在父路由中明确添加通配符:
<Route path="/user" element={<User />}>
<Route path="*" element={<UserProfile />} />
</Route>
最佳实践
建议使用index属性处理默认路由,避免路径匹配混乱。同时注意在useNavigate中传递完整路径而非相对路径。
此升级坑点需要特别关注,否则会导致页面无法正确渲染。

讨论