一探究竟了解React-router 4簡易教學

5 月 25, 2018 | Javascript, | 0 條留言

React-router和React-router-dom的選擇

很多剛使用react的同學,在接觸到react-router的時候往往開始會比較無概念,都會很難進入狀況,什麼react-routerreact-router-dom?下面我們就來一探究竟。

React-router

React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它沒有提供dom操作進行跳轉的API。

React-router-dom

React-router-dom提供了BrowserRouter, Route, Link等API,我們可以通過dom的事件控制路由。
例如點擊一個按鈕進行跳轉,大多數情況下我們是這種情況,所以在開發過程中,我們更多是使用React-router-dom。

使用npm安裝如下:

npm i react-router-dom --save

React-router-dom的核心用法

HashRouter和BrowserRouter

它們兩個是路由的基本,就像蓋房子必須有地基一樣,我們需要將它們包裹在最外層,我們只要選擇其一就可以了。現在講它們的不同:

HashRouter

如果你使用過react-router2或3或者vue-router,你經常會發現一個現象就是url中會有個#,例如localhost:3000/#,HashRouter就會出現這種情況,它是通過hash值來對路由進行控制。如果你使用HashRouter,你的路由就會默認有這個#。

這就是HashRouter的使用情況。下面是對應的代碼。

ReactDOM.render(
    
        
    
),document.getElementById('root'));

BrowserRouter

很多情況下我們則不是這種情況,我們不需要這個#,因為它看起來很怪,這時我們就需要用到BrowserRouter。(但是此方式需要伺服器配合,以apache為例,.htaccess新增重寫規則。)

它的原理是使用HTML5 history API (pushState, replaceState, popState)來使你的內容隨著url動態改變的,如果是個強迫症或者項目需要就選擇BrowserRouter吧。下面我們將主要結合它來講解。
這裡講一個它們的基礎API。

ReactDOM.render(
    
        
    
),document.getElementById('root'));

它的效果如,當你的主頁前面是有一級目錄calendar時,同樣會顯示主頁的內容。它常常配合Link使用。

Route

Route是路由的一個原材料,它是控制路徑對應顯示的組件。我們經常用的是exact、path以及component屬性。



exact控制匹配到/路徑時不會再繼續向下匹配,path標識路由的路徑,component表示路徑對應顯示的組件。後面我們將結合NavLink完成一個很基本的路由使用。同時我們可以設置例如/second/:id的方式來控制頁面的顯示,這需要配合Link或者NavLink配合使用。下面我們會提到

Link和NavLink的選擇

兩者都是可以控制路由跳轉的,不同點是NavLink的API更多,更加滿足你的需求。

Link

主要API是to,to可以接受string或者一個object,來控制url。使用方法如下


這時點擊Link就會跳轉到courses。

NavLink

它可以為當前選中的路由設置類名、樣式以及回調函數等。使用如下

ReactDOM.render(
    
        
  • home
  • second
  • third
),document.getElementById('root'));

exact用於嚴格匹配,匹配到/則不會繼續向下匹配,to則是控制跳轉的路徑,activeClassName是選中狀態的類名,我們可以為其添加樣式。我們在/second後面添加1234來想路由中傳遞信息,這結合了上面Route中的/second/:id,結合使用了,下面是效果圖

線面的1234內容顯示需要用到match,我們馬上就來講一下。

match

match是在使用router之後被放入props中的一個屬性,在class創建的組件中我們需要通過this.props.match來獲取match之中的信息。match中包含的信息如下。

我們常常會獲取id進行使用

Switch

Switch常常會用來包裹Route,它裡面不能放其他元素,用來只顯示一個路由。

文章來源分享:React-router4简约教程