使用可选路径参数react-router

IT技术 javascript reactjs react-router react-router-v4
2021-01-29 00:52:48

我想声明一个带有可选路径参数的路径,因此当我将它添加到页面时做一些额外的事情(例如填充一些数据):

http://localhost/app/path/to/page <= 渲染页面 http://localhost/app/path/to/page/pathParam <= 根据 pathParam 用一些数据渲染页面

在我的react-router中,我有以下路径,以支持这两个选项(这是一个简化示例):

<Router history={history}>    
   <Route path="/path" component={IndexPage}>
      <Route path="to/page" component={MyPage}/>
      <Route path="to/page/:pathParam" component={MyPage}/>
   </Route>    
</Router>

我的问题是,我们可以在一条路线上申报吗?如果我只添加第二行,那么没有找到没有参数的路由。

编辑#1:

这里提到的关于以下语法的解决方案对我不起作用,它是否合适?它是否存在于文档中?

<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />

我的react-router版本是:1.0.3

6个回答

您发布的编辑对旧版本的 React-router (v0.13) 有效并且不再起作用。


react-router v1、v2 和 v3

从版本开始,1.0.0您定义了可选参数:

<Route path="to/page(/:pathParam)" component={MyPage} />

以及多个可选参数:

<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />

您使用括号( )将路由的可选部分起来,包括前导斜杠 ( /)。查看官方文档路由匹配指南页面。

注: :paramName参数相匹配的URL段到下一个/?#有关路径和参数的更多信息,请在此处阅读更多内容


React Router v4 及更高版本

React Router v4 与 v1-v3 有着根本的不同,可选的路径参数在官方文档中没有明确定义

相反,系统会指示您定义一个路径到正则表达式能够理解path参数这允许在定义路径时具有更大的灵活性,例如重复模式、通配符等。因此,要将参数定义为可选参数,请添加尾随问号 ( )。?

因此,要定义可选参数,您可以:

<Route path="/to/page/:pathParam?" component={MyPage} />

以及多个可选参数:

<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />

注: 阵营路由器V4是不相容的在这里阅读更多)。请改用 v3 或更早版本(推荐 v2)。

@AlexShwarc,好点,谢谢。我添加了代码来演示多个可选参数。看一看。
2021-03-16 00:52:48
这仍然是一个关于 URL 中多个可选参数的问题,比如 /route(/:category/(:article)
2021-04-07 00:52:48
我可以创建主路由的可选路径参数吗?例如,我需要在路径中添加语言参数,我的主页 url 将是“/”和“/en”这是演示
2021-04-07 00:52:48
谢谢你。它在我的情况下帮助了我
2021-04-08 00:52:48
@Chris 我敢肯定,它不能这样工作,你检查过了吗?
2021-04-10 00:52:48

对于搜索后到达这里的任何 React Router v4 用户,a<Route>中的可选参数?后缀表示

以下是相关文档:

https://reacttraining.com/react-router/web/api/Route/path-string

路径:字符串

path-to-regexp理解的任何有效 URL 路径

    <Route path="/users/:id" component={User}/>

https://www.npmjs.com/package/path-to-regexp#optional

选修的

参数可以以问号 (?) 为后缀,使参数可选。这也将使前缀可选。

可以使用或不使用页码访问的站点分页部分的简单示例。

    <Route path="/section/:page?" component={Section} />
如何在分隔符后从 url 获取参数?
2021-03-19 00:52:48
@sabliao 嗨!我没有一个工作示例,但是对于像example.com/search?query=test尝试使用下一个模式这样的 URL /:search(search)
2021-03-23 00:52:48
@user2928231 谢谢,更新了他们的新文档 url。据我所知<Match pattern />,现在<Route path />又是这样,但问号后缀现在仍然是处理可选参数的方法。
2021-04-01 00:52:48
嗨@KhrystynaSkvarok,你有没有想过如何让你的路径使用可选的查询字符串工作?我正在尝试做同样的事情
2021-04-02 00:52:48
你好!我的可选参数仍然有问题,无法使下一个路由正常工作:我有players, players/123, players/123/edit, players?unseen=true可选参数?unseen对我不起作用。虽然我尝试了这次讨论中的所有修复。你能帮忙提供正确的路径字符串,它将处理这个问题吗?提前致谢!
2021-04-04 00:52:48

多个可选参数的工作语法:

<Route path="/section/(page)?/:page?/(sort)?/:sort?" component={Section} />

现在,网址可以是:

  1. /部分
  2. /节/页/1
  3. /section/page/1/sort/asc
有什么方法可以支持:“/section//1/”,页面被忽略/可选。
2021-03-19 00:52:48
谢谢,这对我来说是完美的答案,因为我试图在带有 react router v4.0 的 URL 中找出可选的“目录路径”。
2021-03-27 00:52:48

对于 react-router V5 及更高版本,多个路径使用以下语法

<Route
          exact
          path={[path1, path2]}
          component={component}
        />

与常规参数一样,声明一个可选参数只是 Route 的 path 属性的问题;任何以问号结尾的参数都将被视为可选参数:

<Route path="to/page/:pathParam?" component={MyPage}/>