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

React Router:如何使单一路径匹配/test/login与/test/again/login?

解决方案

完全不用新增路由,改一下现有路径的匹配规则就行。

原来的:siteid是单段路径匹配,只能匹配不包含/的单个路径片段,所以只能命中/test/login。要让它同时匹配/test/again/login这种多段路径,只需要给动态参数加上匹配多段的修饰符。

在react-router-dom v6+里有两种方式:

  • 用*:匹配0或多个路径段(允许直接访问/login)
  • 用+:匹配1或多个路径段(必须有至少一段siteid,比如/test/login、/test/again/login,但/login不会被匹配)

根据你的需求,推荐用+更严谨,修改后的代码如下:

const router = createBrowserRouter(
  createRoutesFromElements(
    <>
      <Route path={`/:siteid+/login`} element={<LoginLayout />} />
    </>
  )
);

如果允许/login也被匹配,就换成*:

<Route path={`/*siteid/login`} element={<LoginLayout />} />

之后在组件里通过useParams()获取参数时,siteid会对应完整的路径片段:

  • 访问/test/login → siteid = "test"
  • 访问/test/again/login → siteid = "test/again"

示例组件代码:

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

function LoginLayout() {
  const { siteid } = useParams();
  // 这里可以根据siteid的值做相应逻辑
  return <div>Login Page for {siteid}</div>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:10:17