2016-11-11 191 views
19

我使用了三种不同的路线相同的组件:多路径名称阵营路由器

<Router> 
    <Route path="/home" component={Home} /> 
    <Route path="/users" component={Home} /> 
    <Route path="/widgets" component={Home} /> 
</Router> 

反正是有它结合起来,如:

<Router> 
    <Route path=["/home", "/users", "/widgets"] component={Home} /> 
</Router> 

回答

26

我不要认为这是不幸的。

可以使用map,你会与任何其他JSX成分虽然做:

<Router> 
    {["/home", "/users", "/widgets"].map(path => 
     <Route path={path} component={Home} /> 
    )} 
</Router> 
2

阵营路由器文档的proptype“路径”为字符串类型。所以也没有办法,你可以通过一个数组作为道具组件的道具。

如果你的意图是唯一改变路线,你可以使用相同的组件,用于不同的路线,没有任何问题与

19

至少在反应路由器V4的path可以是正则表达式字符串,这样你就可以做一些事情像这样:

<Router> 
    <Route path="/(home|users|widgets)/" component={Home} /> 
</Router> 

正如你可以看到这是一个有点冗长,因此,如果您component/route简单这样它可能不值得。

当然,如果这实际上经常出现,你总是可以创建一个包装组件,该组件包含一个数组paths参数,该参数可以重复使用正则表达式或.map逻辑。

+1

好主意@Cameron。我发现修改它有点有用,只匹配以一个组开头的路径:'/^\ /(home | users | widgets)/'现在,'/ widgets'会匹配,但是'/ dashboard/widgets '不匹配。 – Towler

+3

应该很好,但现在类型正则表达式在prop-types验证中是无效的:'警告:失败的道具类型:''regexp'类型的道路'无效'提供给'Route',期望的'字符串'。' –

+0

@FábioPaiva是啊,我还没有想出如何在路线中放置一个任意的正则表达式 – Atav32