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

React中如何从useLocation获取匹配路由的原始路径?

获取React Router匹配的路由模板路径

方法一:使用useMatch钩子(适用于单个路由组件)

在需要获取模板路径的路由组件(比如ProjectDashboard)中,直接用useMatch传入对应的路由模板路径,返回的匹配信息里,match.path就是带参数占位符的目标路径:

import { useMatch } from 'react-router-dom';

function ProjectDashboard() {
  const match = useMatch("/admin/project/:id/dashboard");
  // 输出 "/admin/project/:id/dashboard"
  console.log(match.path);
  return <div>项目看板</div>;
}

方法二:使用matchRoutes结合路由配置数组(全局/布局组件中使用)

如果要在布局组件或非直接路由渲染的组件中获取,先把路由配置转为数组形式,再通过matchRoutes匹配当前路径:

第一步:将路由配置转为数组

const routes = [
  {
    path: "/admin/project/:id",
    element: <ProjectLayout />,
    title: "ProjectLayout",
    children: [
      {
        path: "/admin/project/:id/dashboard",
        element: <ProjectDashboard />,
        title: "ProjectDashboard"
      },
      {
        path: "/admin/project/:id/tasks",
        element: <ProjectTasks />,
        title: "ProjectTasks"
      }
    ]
  }
];

提示:子路由可以简化为相对路径,比如把"/admin/project/:id/dashboard"改成"dashboard",最终匹配的模板路径会自动拼接为完整的/admin/project/:id/dashboard,不影响后续获取。

第二步:在组件中获取匹配的路由模板

import { useLocation, matchRoutes } from 'react-router-dom';

function ProjectLayout() {
  const location = useLocation();
  // 匹配当前路径对应的路由项
  const matchedRoutes = matchRoutes(routes, location);
  // 取最后一项,即当前最具体的路由
  const currentRoute = matchedRoutes.at(-1);
  
  // 输出对应的模板路径,比如 "/admin/project/:id/dashboard"
  console.log(currentRoute.route.path);
  return <div>{/* 布局内容 */}</div>;
}

不推荐的硬编码方式

如果是临时简单场景,也可以手动拼接模板路径,但这种方式灵活性差,路由变更时需要同步修改:

import { useParams } from 'react-router-dom';

function ProjectTasks() {
  // 仅作示例,实际不建议硬编码
  const templatePath = "/admin/project/:id/tasks";
  console.log(templatePath);
  return <div>任务列表</div>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:45:29