從 React Router 談談路由的那些事

React Router 是專爲 React 設計的路由解決方案,在使用 React 來開發 SPA (單頁應用)項目時,都會須要路由功能,而 React Router 應該是目前使用率最高的。html

React Router 並非 Facebook 的 React 官方團隊開發的,可是聽說有官方人員參與開發。React Router 的設計思想來源於 Ember 的路由,若是原來有用過 Ember 的路由,那麼應該對 React Router 不會陌生。前端

什麼是路由?

對於沒有開發事後端,也沒有開發過 SPA 的前端來講,「路由」這個名詞可能會讓人比較困惑,這裏的路由並非指「硬件路由」,也不是網絡七層協議中的「網絡層路由」,可是其思想原理是同樣的。我儘可能簡單通俗的介紹一下。react

假如咱們有一臺提供 Web 服務的服務器的網絡地址是:10.0.0.1,而該 Web 服務又提供了三個可供用戶訪問的頁面,其頁面 URI 分別是:git

那麼其路徑就分別是 //about/concatgithub

當用戶使用 http://10.0.0.1/about 來訪問該頁面時,Web 服務會接收到這個請求,而後會解析 URI 中的路徑 /about,在 Web 服務的程序中,該路徑對應着相應的處理邏輯,程序會把請求交給路徑所對應的處理邏輯,這樣就完成了一次「路由分發」,這個分發就是經過「路由」來完成的。後端

前端路由

前端的路由和後端的路由在實現技術上不同,可是原理都是同樣的。在 HTML5 的 history API 出現以前,前端的路由都是經過 hash 來實現的,hash 能兼容低版本的瀏覽器。若是咱們把上面例子中提到的 3 個頁面用 hash 來實現的話,它的 URI 規則中須要帶上 #瀏覽器

 

http://10.0.0.1/
http://10.0.0.1/#/about
http://10.0.0.1/#/concat
 

Web 服務並不會解析 hash,也就是說 # 後的內容 Web 服務都會自動忽略,可是 JavaScript 是能夠經過 window.location.hash 讀取到的,讀取到路徑加以解析以後就能夠響應不一樣路徑的邏輯處理。服務器

history 是 HTML5 纔有的新 API,能夠用來操做瀏覽器的 session history (會話歷史)。基於 history 來實現的路由能夠和最初的例子中提到的路徑規則同樣。網絡

用戶可能都察覺不到該訪問地址是 Web 服務實現的路由仍是前端實現的路由。session

從性能和用戶體驗的層面來比較的話,後端路由每次訪問一個新頁面的時候都要向服務器發送請求,而後服務器再響應請求,這個過程確定會有延遲。而前端路由在訪問一個新頁面的時候僅僅是變換了一下路徑而已,沒有了網絡延遲,對於用戶體驗來講會有至關大的提高。

說了這麼多的「路由基礎」,該回頭來講說 React Router 了。

配置路由

使用 React Router 來配置上面例子中的三個頁面,每一個頁面分別對應着一個 React Component。

/about 頁面的入口文件 about.js

 

相關文章
相關標籤/搜索