You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router v6.0.0-beta.0升级beta.5后嵌套路由路径重复累加问题咨询

问题原因

React Router v6.0.0-beta.1及后续版本调整了<Link>组件相对路径的解析规则:beta.0版本中相对路径默认基于当前嵌套路由的父路径解析,更新后默认基于当前地址栏的完整路径解析。
你在/users/me页面点击指向me的相对路径<Link>时,会直接在当前路径后拼接me,生成/users/me/me的异常路径,多次点击就会出现路径持续累加的问题。你当前的嵌套路由配置本身完全符合v6规则,不需要调整,仅需要修改跳转逻辑即可。

解决方案

有三种常用的修复方式,可根据业务场景选择:

  • 方案1:使用绝对路径写跳转目标
    直接把所有指向用户子路由的<Link>的to属性写为完整绝对路径,示例:

    <Link to="/users/me">个人中心</Link>
    <Link to="/users/all">所有用户</Link>
    

    这种写法逻辑最直观,不会受当前页面路径影响,适合路由层级不深的项目。

  • 方案2:相对路径基于父路由层级跳转
    跳转时先回退到父路由层级再拼接子路径,示例:

    <Link to="../me">个人中心</Link>
    <Link to="../all">所有用户</Link>
    

    这种写法不需要写完整路径,适合路由层级经常调整的场景。

  • 方案3:通过useRouteMatch获取父路径动态拼接
    如果你不想硬写路径前缀,可以在Users组件内用useRouteMatch获取当前父路由的路径,动态拼接子路由:

    import { useRouteMatch, Link } from 'react-router-dom';
    
    function Users() {
      const { path } = useRouteMatch();
      return (
        <div>
          <Link to={`${path}/me`}>个人中心</Link>
          <Link to={`${path}/all`}>所有用户</Link>
          {/* 原有子路由配置保持不变 */}
          <Routes>
            <Route path="me" element={<Me />} />
            <Route path="all" element={<All />} />
          </Routes>
        </div>
      )
    }
    

    这种写法复用性最高,适合封装公共路由组件的场景。

内容的提问来源于stack exchange,提问作者remus palade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:15:02