【发布时间】:2018-11-27 10:29:43
【问题描述】:
我真的很惊讶以前没有问过这个问题。这个或者我在以一种奇怪的方式问。
在 react router.. 中我们这样做:
<BrowserRouter>
<Route path='/' component={Hello} />
<Route path='/there' component={There} />
</BrowserRouter>
这段代码显示了各种奇怪的行为,如果我去/there,组件 Hello 仍然会被渲染。
解决方案是添加一个switch 组件并从最具体的路由组件重新排序。这似乎非常荒谬,尤其是作为来自后端背景的人。为什么我需要重新排序我的路线?
另外,即使添加了开关,仍然存在奇怪的行为。例如,任何以/there 开头的路线(如/there/was/a/time)仍然匹配
更好的最佳解决方案是将exact 放在 Route 组件上,如下所示:
<BrowserRouter>
<Route exact path='/' component={Hello} />
<Route exact path='/there' component={There} />
</BrowserRouter>
这种行为提供了与任何其他正常框架一样的正常预期结果。转到website.com/there 或website.com/there/ 会呈现There 组件。并转到website.com 或website.com/ 呈现Hello
我认为任何网站中的大多数路由都更适合exact。那么为什么不默认设置为 true 呢?如果他们想喜欢exact={false},是否允许人们将其设置为false?
我有什么遗漏吗?我试图寻找这个问题,但没有找到答案。在他们刚刚提到的文档中,exact 的默认值是 false,没有任何进一步的解释
【问题讨论】:
标签: javascript reactjs react-router