剛剛接觸react不久,發現在項目中的路由配置中會有switch和exact的使用,現總結如下
switch 為了解決route的唯一渲染(僅僅渲染一個路由路徑)出現的
<Switch>是唯一的因為它僅僅只會渲染一個路徑。相比之下(不使用<Switch>包裹的情況下),每一個被location匹配到的<Route>將都會被渲染。認真思考一下圖1-1的代碼:
如果URL是/about, 那么<About>,<User>,和<NoMatch>將都被渲染,因為它們的path全都被匹配到。設計如此,允許我們通過<Route>s以多種方式去構建我們的應用,比如:sidebars 和 breadcrumbs,bootstrap tabs,等。
然而,有時,我們只想選擇性的渲染一個<Route>。如果URL是/about我們並不想也匹配到/:user(或者顯示給我們404頁面)。參閱圖1-2,看看如何使用<Switch>來處理這個問題的:

現在,如果URL是/about,<Switch>將會開始尋找相匹配的<Route>。<Route path="/about" />將會被匹配到,緊接着 <Switch>會停止繼續匹配並且渲染<About>。同理,如果URL是/michael,那么<User>將會被渲染。
exact的作用
再看下面一組圖
代碼:

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

經過<Switch>的使用及順序的調整,我們終於得到了想要的結果,可是這樣就滿足了么?難道每次寫路由的時候都要嚴格控制書寫順序嗎?答案當然是否定的!
<Route>有個exact屬性當<Route>添加exact屬性后只有URL和該<Route>的path屬性進行精確比對后完全相同該<Route>才會被渲染。
那么,我們把<Switch>和exact屬性結合起來使用呢?請看最后一組圖
代碼:

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