react-router v5筆記


官方文檔 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 記錄( pushStatereplaceState 和 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屬性代表應用程序現在在哪,你想去哪。

withRouter高階組件:當路由渲染是,withRouter會將已更新的history、match和location屬性傳入被包裹的組件。
match、history和location對象都會在渲染Route組件時傳入component、render和children指向的組件。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM