<BrowserRouter> <Switch> <Route path='/' component={App} /> <Route path='/detail' component={Detail} /> <Route path='/list' component={List} /> </Switch>
</BrowserRouter>
看上去这个代码好像没什么问题,但是执行结果却不是那么尽如人意。 在浏览器地址中任意切换到上面的路由,它始终渲染的是 App这个组件。 为什么呢? 所以这里我们就需要用到上面的属性 - exact,这个属性的默认值是 false,所以内部采用是模糊匹配,只要匹配到一个就不会往后再匹配。 <Route path='/' exact={false} component={App} />
所以模糊匹配下的结果就是 path='/', 对应的组件就是 App / 可以匹配 path='/'
那好这个时候我们加上了精确匹配,当然不需要每个都添加,我们只需要在第一个路由上加上就可以了(这句话有时候对),加上之后的意思就是必须是完全相等的值才可以匹配到。 location / === route path='/'
到现在为止我们增加了一个属性就已经可以满足我们的需求,但是再看下下面这段代码 <BrowserRouter> <Switch> <Route path='/' exact={true} component={App} /> <Route path='/detail' component={Detail} /> + <Route path='/detail/:id' component={DetailA} /> <Route path='/list' component={List} /> </Switch>
</BrowserRouter>
这个时候我们访问 /、/list、/detail 都没有问题。 可是访问 /detail/100 的时候渲染的还是 Detail 组件。 问题还是咱们上面发现的问题,解决办法就是需要增加 exact属性 <Route path='/detail' exact={true} component={Detail} />
最后总结 这个知识点很小,但是它的作用很大。最直接的就是在 path='/' 上设置exact,但是其他的一些特殊情况也需要注意。所以只在 path='/' 增加此属性就能解决问题,这句话有时候是正确的。所以最暴力的方法就是所有 route默认为 true。当然我们应该知道为什么这么做。 好了,本文就到这里,如果有理解不正确的地方还请斧正。 本文发布于:2024-01-31 14:49:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668374029294.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |