2015-06-22 63 views
2

我建设有反应,反应路由器一个网站,我有两个不同类型的路线,像波纹管的例子:有没有办法在使用react-router时将params限制在某些值?

<Route name="products" path="/:type/*" handler={ ProductList } /> 
 
<Route name="generic-template" path="/*" handler={ TemplatePage } />

所以我的产品页面需要的类型参数,可以是A,B或C,我希望我访问的任何链接只有在类型为A,B或C时才能匹配我的产品路线。举例:

  • /type-A/bla -bla-filter - > ProductList应该加载
  • /B型/其他-PARAMS - >产品应加载
  • /服务/信息 - > TemplatePage应该加载

但以我现在,任何网页是由产品的路线,因为匹配该类型仅作为斜线后面的第一个字符串匹配。作为一种变通方法,我想换我产品列表组件为单独包装部件,只是发送类型参数沿着这样的:

var TypeAWrapper = React.createClass({ 
 
    render: function() { 
 
    return (
 
     <ProductList params={{ splat: this.props.params.splat, type: 'A' }} /> 
 
    ); 
 
    } 
 
}); 
 

 
var TypeBWrapper = React.createClass({ 
 
    render: function() { 
 
    return (
 
     <ProductList params={{ splat: this.props.params.splat, type: 'B' }} /> 
 
    ); 
 
    } 
 
});

,然后我用了不同的路线为每类产品与静态匹配。

有没有人知道更好的解决方案呢?

回答

1

根据this issue公认的解决方案是“使三个使用相同处理程序的路线”。

+0

谢谢,这意味着没有其他方式使用正则表达式或类似的解决方案。不幸的是,我不能直接使用相同的处理程序,因为我需要显式地将我的类型参数传递给组件。这就是为什么我需要这些包装。 –

相关问题