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

React Router 5路由配置问题:无法渲染深层路由

React Router v5 路由匹配问题解决办法

问题根源

React Router v5 的 <Switch> 组件是从上到下匹配第一个符合路径的路由就停止渲染。你的路由按路径从短到长排列,当访问 /projects/project/1/device/1 这类长路径时,会先被前面的 /projects/project/:projectId 路由匹配到(该路由没有 exact 属性,会匹配所有以它开头的路径),导致后面更具体的路由根本没机会被匹配。

两种解决方案

方案一:调整路由顺序,长路径放前面

把更具体、更长的路由放在 <Switch> 最前面,短路径后置,让 <Switch> 优先匹配最符合的路由:

<Switch>
  {/* 根路径重定向 */}
  <Redirect exact from="/" to="/projects" />

  {/* 最具体的任务路由 */}
  <Route path="/projects/project/:projectId/device/:deviceId/task/:taskId">
    <p>Task info.</p>
  </Route>

  {/* 设备路由 */}
  <Route path="/projects/project/:projectId/device/:deviceId">
    <p>List of tasks</p>
    <Link to="/projects/project/1/device/1/task/1">Task #1</Link>
  </Route>

  {/* 项目路由 */}
  <Route path="/projects/project/:projectId">
    <p>List of devices</p>
    <Link to="/projects/project/1/device/1">Device #1</Link>
  </Route>

  {/* 项目列表路由 */}
  <Route path="/projects" exact>
    <p>List of projects.</p>
    <Link to="/projects/project/1">Project #1</Link>
  </Route>
</Switch>

方案二:给非顶级路由添加 exact 属性

给除根重定向和项目列表外的所有路由加上 exact,确保只有路径完全匹配时才渲染对应组件:

<Switch>
  <Redirect exact from="/" to="/projects" />

  <Route path="/projects" exact>
    <p>List of projects.</p>
    <Link to="/projects/project/1">Project #1</Link>
  </Route>

  <Route path="/projects/project/:projectId" exact>
    <p>List of devices</p>
    <Link to="/projects/project/1/device/1">Device #1</Link>
  </Route>

  <Route path="/projects/project/:projectId/device/:deviceId" exact>
    <p>List of tasks</p>
    <Link to="/projects/project/1/device/1/task/1">Task #1</Link>
  </Route>

  <Route path="/projects/project/:projectId/device/:deviceId/task/:taskId" exact>
    <p>Task info.</p>
  </Route>
</Switch>

额外提示

建议统一去掉路径末尾的斜杠,React Router 会自动处理路径匹配,避免 /projects 和 /projects/ 这类细微差异导致的匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:25:19