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

React Router DOM v6 如何实现URL中basket路径可选可移动?

React Router v6 配置可选的中间路径(basket)

需要让basket成为URL中的可选中间路径,同时支持以下URL的匹配:

  • /en/shop/hiper-product-name-12344
  • /en/shop
  • /en/basket/shop/hiper-product-name-12344
  • /en/blog/title-article
  • /en/basket/blog/title-article

方案一:使用路由组复用子路由

这种方式适合需要复用相同子路由逻辑的场景,避免重复代码:

首先抽离共享的shop和blog路由组件:

import { Routes, Route } from 'react-router-dom';

const SharedShopBlogRoutes = () => (
  <>
    <Route path="shop" element={<ShopComponent />}>
      <Route path=":product" element={<ProductDetailComponent />} />
    </Route>
    <Route path="blog" element={<BlogComponent />}>
      <Route path=":article" element={<ArticleDetailComponent />} />
    </Route>
  </>
);

然后在主路由中同时配置带basket和不带basket的路径:

<BrowserRouter>
  <Routes>
    <Route path="/:lang" element={<App />}>
      {/* 匹配带basket的路径,比如/en/basket/shop */}
      <Route path="basket" element={<Outlet />}>
        <SharedShopBlogRoutes />
      </Route>
      {/* 匹配不带basket的路径,比如/en/shop */}
      <SharedShopBlogRoutes />
    </Route>
  </Routes>
</BrowserRouter>

方案二:使用可选路径段(React Router v6.4+)

如果你的React Router版本是v6.4及以上,可以直接在路径中使用(...)语法定义可选的路径段,写法更简洁:

<BrowserRouter>
  <Routes>
    <Route path="/:lang" element={<App />}>
      {/* 同时匹配/en/shop 和 /en/basket/shop */}
      <Route path="(basket/)?shop" element={<ShopComponent />}>
        <Route path=":product" element={<ProductDetailComponent />} />
      </Route>
      {/* 同时匹配/en/blog 和 /en/basket/blog */}
      <Route path="(basket/)?blog" element={<BlogComponent />}>
        <Route path=":article" element={<ArticleDetailComponent />} />
      </Route>
    </Route>
  </Routes>
</BrowserRouter>

这里的(basket/)?表示该路径段是可选的,末尾的?标记整个组可以出现0次或1次,完美匹配带/不带basket的两种URL结构。

注意事项

  • 方案二需要React Router v6.4及以上版本支持;
  • 如果需要在组件中判断当前URL是否包含basket,可以通过useParams()或useLocation()获取路径信息进行判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:16:02