使用可选的path参数响应路由器

我想声明一个可选path参数的path,因此当我添加页面做额外的事情(例如填充一些数据):

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

在我的反应路由器中,我有以下path,以支持这两个选项(这是一个简化的例子):

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

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

编辑#1:

这里提到的关于下面的语法的解决scheme对我来说不起作用,这是一个合适的吗? 它是否存在于文档中?

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

我的反应路由器版本是:1.0.3

您发布的修改对旧版本的React-router(v0.13)有效,不再适用。


React路由器v1,v2和v3

从版本1.0.0您可以使用以下参数定义可选参

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

并为多个可选参数:

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

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

注意:: :paramName参数匹配一个URL段到下一个/ :paramName # 有关path和参数的更多信息,请参阅此处 。


反应路由器v4

React Router v4与v1-v3有着根本的区别,可选的path参数也没有在官方文档中明确定义。

而是指示您定义path-to-regexp可以理解的path参数。 这样可以更灵活地定义path,例如重复模式,通配符等。因此,要将参数定义为可选,请添加尾随问号( ? )。

因此,要定义一个可选参数,您需要:

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

并为多个可选参数:

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

注意: React Router v4与react-router-relay 不兼容 ( 在这里阅读更多 )。 使用版本v3或更早版本(build议v2)。

对于在search后到达此处的任何React Router v4用户, <Route>中的可选参数用“ 后缀。

这是相关的文件:

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

path:string

path正则expression式可以理解的任何有效的URLpath。

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

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

可选的

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


简单的例子,一个网站的分页部分,可以使用或不使用页码进行访问。

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