在 React Router 中有三種類型的元件:路由器元件,路由比對元件,導航元件。這些元件都來自于 <code>react-router-dom</code>。
對于每一個 React Router 應用來說,都應該有一個路由器元件,它們會為應用建立一個專用的 <code>history</code> 對象。針對 Web 項目,<code>react-router-dom</code> 提供了 <code><BrowserRouter></code> 和 <code><HashRouter></code>。
React Router 提供了兩種路由比對元件:<code><Route></code> 和 <code><Switch></code>。
路由比對是通過比較 <code><Route></code> 元件的 <code>path</code> 屬性和目前位址的 pathname 實作的,如果比對則渲染目前路由元件的内容,如果不比對則渲染 null。注意:沒有提供 <code>path</code> 屬性的 <code><Route></code> 元件将總是比對。
<code><Switch></code> 元件用于給 <code><Route></code> 元件分組,可以将一組 <code><Route></code> 元件嵌套在 <code><Switch></code> 元件中。
那麼,<code><Switch></code> 元件僅是為了給 <code><Route></code> 元件分組而誕生的嗎?我們知道 <code><Route></code> 元件通過比較它的 <code>path</code> 屬性和目前位址來判斷是否渲染它的内容,是以就會存在多個 <code><Route></code> 比對成功且都渲染它們内容的情況。為了避免這樣的情況,<code><Switch></code> 元件就起了作用,它會疊代當中的 <code><Route></code> 元件,并選出第一個比對的 <code><Route></code> 來渲染。
React Router 提供了 <code><Link></code> 元件用于為應用提供連結,當渲染 <code><Link></code> 元件的時候,會在應用中渲染為 HTML 的 <code><a></code> 标簽。
另外還有一個特殊的 <code><Link></code> 元件就是 <code><NavLink></code>,如果目前的位址與它的屬性相比對,它就會使用 "active" 樣式。
任何時候如果您想要強制一個導航,就可以使用 <code><Redirect></code> 元件,當它被渲染的時候,就會導航到它的屬性。