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


剛剛接觸react不久,發現在項目中的路由配置中會有switch和exact的使用,現總結如下

switch  為了解決route的唯一渲染(僅僅渲染一個路由路徑)出現的

  <Switch>是唯一的因為它僅僅只會渲染一個路徑。相比之下(不使用<Switch>包裹的情況下),每一個被location匹配到的<Route>將都會被渲染。認真思考一下圖1-1的代碼:

 

 
 
圖1-1

  如果URL是/about, 那么<About>,<User>,和<NoMatch>將都被渲染,因為它們的path全都被匹配到。設計如此,允許我們通過<Route>s以多種方式去構建我們的應用,比如:sidebars 和 breadcrumbs,bootstrap tabs,等。

然而,有時,我們只想選擇性的渲染一個<Route>。如果URL是/about我們並不想也匹配到/:user(或者顯示給我們404頁面)。參閱圖1-2,看看如何使用<Switch>來處理這個問題的:

 

圖1-2

 

  現在,如果URL是/about,<Switch>將會開始尋找相匹配的<Route>。<Route path="/about" />將會被匹配到,緊接着 <Switch>會停止繼續匹配並且渲染<About>。同理,如果URL是/michael,那么<User>將會被渲染。

 

exact的作用

 再看下面一組圖

代碼:

 

 

 
圖2-4

 

  看到運行結果四(觀圖2-6),我不禁呵呵了一下,感嘆世界真奇妙。此時,我們不妨暮然回首,其實答案就在原文翻譯的第一句話,對,就像那句換說的一樣,<Switch>只找到第一個被location匹配到的<Route>就立即停止繼續匹配,並且把它渲染出來。"/second"同時和"/","/second/"相匹配,因為先匹配到了前者,所以只有頁面一被渲染。

驗證一下,把兩者前后順序進行調整,請看下面一組圖

代碼:

 

 

圖2-7

 

 

 
圖2-9

  經過<Switch>的使用及順序的調整,我們終於得到了想要的結果,可是這樣就滿足了么?難道每次寫路由的時候都要嚴格控制書寫順序嗎?答案當然是否定的!

<Route>有個exact屬性當<Route>添加exact屬性后只有URL和該<Route>的path屬性進行精確比對后完全相同該<Route>才會被渲染。

  那么,我們把<Switch>和exact屬性結合起來使用呢?請看最后一組圖

代碼:

 

 

 
圖2-10

 



鏈接:https://www.jianshu.com/p/ed5e56994f13


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM