react的路由中的switch和exact的使用

刚刚接触react不久,发如今项目中的路由配置中会有switch和exact的使用,现总结以下react

switch  为了解决route的惟一渲染(仅仅渲染一个路由路径)出现的bootstrap

  <Switch>是惟一的由于它仅仅只会渲染一个路径。相比之下(不使用<Switch>包裹的状况下),每个被location匹配到的<Route>将都会被渲染。认真思考一下图1-1的代码:ide

 

 
 
图1-1

  若是URL是/about, 那么<About>,<User>,和<NoMatch>将都被渲染,由于它们的path全都被匹配到。设计如此,容许咱们经过<Route>s以多种方式去构建咱们的应用,好比:sidebars 和 breadcrumbs,bootstrap tabs,等。spa

然而,有时,咱们只想选择性的渲染一个<Route>。若是URL是/about咱们并不想也匹配到/:user(或者显示给咱们404页面)。参阅图1-2,看看如何使用<Switch>来处理这个问题的:翻译

 

图1-2

 

  如今,若是URL是/about,<Switch>将会开始寻找相匹配的<Route>。<Route path="/about" />将会被匹配到,紧接着 <Switch>会中止继续匹配而且渲染<About>。同理,若是URL是/michael,那么<User>将会被渲染。设计

 

exact的做用3d

 再看下面一组图blog

代码:路由

 

 

 
图2-4

 

  看到运行结果四(观图2-6),我不由呵呵了一下,感叹世界真奇妙。此时,咱们不妨暮然回首,其实答案就在原文翻译的第一句话,对,就像那句换说的同样,<Switch>只找到第一个被location匹配到的<Route>就当即中止继续匹配,而且把它渲染出来。"/second"同时和"/","/second/"相匹配,由于先匹配到了前者,因此只有页面一被渲染。it

验证一下,把二者先后顺序进行调整,请看下面一组图

代码:

 

 

图2-7

 

 

 
图2-9

  通过<Switch>的使用及顺序的调整,咱们终于获得了想要的结果,但是这样就知足了么?难道每次写路由的时候都要严格控制书写顺序吗?答案固然是否认的!

<Route>有个exact属性当<Route>添加exact属性后只有URL和该<Route>的path属性进行精确比对后彻底相同该<Route>才会被渲染。

  那么,咱们把<Switch>和exact属性结合起来使用呢?请看最后一组图

代码:

 

 

 
图2-10

连接:https://www.jianshu.com/p/ed5e56994f13
相关文章
相关标签/搜索