React router v4阻止匹配的子路由

时间:2017-10-19 08:41:54

标签: javascript reactjs nested switch-statement router

我遇到了React Router v4 Switch组件的问题。我很惊讶我找不到这个问题的相关主题。常见的Switch看起来像这样:

<Switch>
  <Route path='/path1' component={Path1Component}/>
  <Route path='/path2' component={Path2Component}/>
  <Route exact path='/' component={Home}/>
  <Route component={NotFound}/>
</Switch>

这意味着当我走上一条道路时:&#39; /&#39;我得到一个Home组件,在&#39; / path1&#39;我得到一个Path1Component并在路径&#39; / foobar&#39;我得到一个NotFound组件。这非常好

然而,当我在&#39; / path1 / foobar&#39; route我也得到了Path1Component。这种行为在每种情况下都不正确 - 这次我不希望任何嵌套路由用于&#39; / path1&#39;路线。 &#39; / PATH1 / foobar的&#39;应该得到一个NotFound组件,任何字符串,&#39; /&#39;或没有在&#39; / path1&#39;应该返回NotFound组件。

这个问题的首选解决方案是什么?我可以添加精确到每个路径,但不会过度代码?我觉得这应该是默认的,但事实并非如此。

即使在React Router v4文档上,例如here。我看到了这个问题 - 这里&#39; /将匹配/ foo&#39;也会匹配。你的想法是什么?

1 个答案:

答案 0 :(得分:0)

有一个讨论here,但为了简短起见:它会破坏现有代码。如果要更改,如果您想要匹配子路线而不执行&#39; path1 / child1&#39;,则必须执行exact={false}