官方文檔 https://reacttraining.com/react-router/web/guides/quick-start
中文文檔 https://react-router.docschina.org/web/example/basic
git地址 https://github.com/ReactTraining/react-router#readme
react-router是與react配合使用的路由庫,react-router提供多個包可以單獨使用。
react-router提供路由的核心功能,react-router-dom基於react-router提供了在瀏覽器運行環境下的一些功能,例如Link組件和BrowserRouter組件。react-router-native同樣基於react-router,提供了react-native運行環境下的一些功能。
如果基於瀏覽器環境的開發,在使用npm安裝包時只需要安裝react-router-dom即可,不需要再顯示的安裝react-router包,因為在安裝react-router-dom時npm會解析package.json文件安裝依賴。
所以下面兩種寫法是等效的
寫法1:
import {Swtich, Route, Router, HashHistory, Link} from 'react-router-dom';
寫法2:
import {Switch, Route, Router} from 'react-router'; import {HashHistory, Link} from 'react-router-dom';
在使用react-router編寫路由時,和我們之前寫的靜態路由不太一樣,靜態路由是將路由聲明在一處,並在應用程序渲染前導入,這個react-router v4之前的版本類似。react-router v4開始使用動態路由,這樣就不需要將路由聲明在一處,而是作為我們編寫的react組件內容的一部分,Router組件就像div組件一樣被使用,也就是在應用程序渲染時才發生路由。
React Router提供了三種類型的組件:router components路由器組件, route components路由組件, navigation components導航組件,三種組件都應該從react-router-dom導入。
router components路由器組件:對於 Web 項目,react-router-dom
提供了 <BrowserRouter>
和 <HashRouter>
路由。這兩個路由都會為你創建一個專門的 history
對象。一般來說,如果你有一個響應請求的服務器,則你應該使用 <BrowserRouter>
,如果你使用的是靜態文件的服務器,則應該使用 <HashRouter>
。
route components路由組件:路由匹配組件有Route和Switch,Router的作用是在location和path屬性匹配時在此處渲染React組件,通過component、render和children三個屬性來指向渲染組件,component屬性通常指向一個現存的組件,render只有在需要傳遞參數給渲染組件時使用。Switch不是必須的,用於將Route組件分組並選擇一個與當前地址匹配的第一個Route。
navigation components導航組件:有Link、NavLink和Redirect三個組件用於導航,Link組件會在Html中創建一個a標簽,to屬性指向一個導航地址。
下面記錄了一些常用的組件和屬性,文檔中有非常詳細的例子可以參考。
Router:所有路由器組件的公用底層實現,通常我們會使BrowserRouter等高級組件代替。
BrowserRouter:使用 HTML5 歷史 API 記錄( pushState
,replaceState
和 popstate
事件)的 <Router>
使您的UI與URL保持同步。
Route:作用是在location和Route的path屬性匹配時,在此處呈現UI。如有Route沒有path會一直與它最近的父級匹配。
Switch:用於將Route或Redirect組件分組,選擇第一個與地址匹配的Route渲染。
Link:提供可訪問的導航,會在html中創建a標簽。
match屬性:match對象中包含了如何匹配URL的信息。
history屬性:history對象實現對session歷史的管理。
location屬性:location屬性代表應用程序現在在哪,你想去哪。