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

React-Router中如何从嵌套路由正确导航至其他组件

问题根因

你遇到的跳转异常核心是导航栏配置的跳转链接使用了相对路径:React Router 中相对路径的跳转规则是基于当前页面路径做拼接,而非从站点根路径开始计算。比如当前处于 /routing/something 路径下时,点击 to="movies" 的链接会自动拼接为 /routing/movies,自然无法匹配到你在 App 组件定义的根级别路由规则。

解决方案

1. 修正导航链接为绝对路径

所有全局导航的跳转路径统一以 / 开头,改为根路径级别的绝对路径即可解决拼接问题。比如你的 navigationLinks 配置需要做如下调整:

// 修正前(相对路径,会触发路径拼接)
const navigationLinks = [
  {title: '首页', url: ''},
  {title: '电影', url: 'movies'},
  {title: '路由示例', url: 'routing'}
]

// 修正后(绝对路径,直接从根路径匹配)
const navigationLinks = [
  {title: '首页', url: '/'},
  {title: '电影', url: '/movies'},
  {title: '路由示例', url: '/routing'}
]

2. 可选:优化嵌套路由结构

你当前把 /routing/:arrow 子路由直接写在 App 级的 Switch 中,不是标准的嵌套路由写法,可调整为更易维护的结构:

  • 首先去掉 App 组件中 /routing 路由的 exact 属性:
// 修正前
<Route exact path="/routing" component={RoutingExample} />
// 修正后
<Route path="/routing" component={RoutingExample} />
  • 然后将子路由迁移到 RoutingExample 组件内部:
const RoutingExample = () => {
  let { path, url } = useRouteMatch();

  return (
    <div className="container border border-primary">
      <ul>
        <li>
          {`useParams ->`}
          <Link to={`${url}/arrow`}>
            <button className="btn btn-outline-primary">Click</button>
          </Link>
        </li>
      </ul>
      {/* 内部嵌套子路由 */}
      <Switch>
        <Route exact path={`${path}/:arrow`} component={Child} />
      </Switch>
    </div>
  );
};

调整后路由层级更清晰,也能避免后续新增路由时出现匹配优先级问题。

3. 验证路由匹配顺序

确认 App 组件中 Switch 下的路由规则顺序合理:静态路由在前、动态参数路由在后,通配符 404 路由放在最后,你当前的路由顺序除了需要去掉 /routing 的 exact 属性外,其余部分符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:48:04