react-router-dom筆記
- import
as
關鍵字用來給匯入的變數設定新的名字,同時可以將整個模組匯入。
改名字:
import { lastName as surname } from './profile';
整體載入:
import * as circle from './circle';
console.log('圓面積:' + circle.area(4));
console.log('圓周長:' + circle.circumference(14));
- exact用於精準匹配路徑,不用exact也會匹配到匹配的路徑的子路徑,這樣兩個路由元件都會顯示。我們需要的是每次切換隻會顯示一個Route中指定的元件
<Route exact path="/" component={App}></Route>
<Route path="/hot" component={Hot} ></Route>
傳遞引數到路由對應的元件:在引數前面加上
:
,比如${match.url}/:id
,match.params(函式式宣告的元件中,match需要在函式引數中引入)或this.props.match.params(React class類render函式中)
路由路徑引數傳遞到模板,用baseUrl/:id類似格式,元件中用match.params.id接收。
Link元件通過to屬性連結到對應
path
Route
元件後 會渲染component屬性對應的元件到頁面上。路由的巢狀:${match.url}可以獲取到當前的基礎路徑。然後在路由用到的元件中可以用。
路由的巢狀,直接在子元件模板中新增Route,Link,match.url引入基礎路徑
Route 自帶三個 render method 和三個 props 。
render methods 分別是:
<Route component>
<Route render>
<Route children>
props 分別是:
match
location
history
當訪問地址和路由匹配時,一個 React component 就會被渲染,此時此元件接受 route props (match, location, history)。
match 物件包含了 Route path 如何與 URL 匹配的資訊,具有以下屬性:
params: object 路徑引數,通過解析 URL 中的動態部分獲得鍵值對
isExact: bool 為 true 時,整個 URL 都需要匹配
path: string 用來匹配的路徑模式,用於建立巢狀的 Route
url: string URL 匹配的部分,用於巢狀的 Link在以下情境中可以獲取 match 物件
在 Route component 中,以 this.props.match獲取
在 Route render 中,以 ({match}) => () 方式獲取
在 Route children 中,以 ({match}) => () 方式獲Router/Route 的改變:V4 Router元件裡只能渲染一個元件,V2和V3可以渲染多個。
NavLink
Link 的特殊版,為頁面導航準備的。因為導航需要有 “啟用狀態”。
activeStyle: object
如果不想使用樣式名就直接寫styleactiveClassName: string
導航選中啟用時候應用的樣式名,預設樣式名為 activeexact: bool
若為 true,只有當訪問地址嚴格匹配時啟用樣式才會應用在Route中同時使用render和component時render方法不會起作用!
replace使得該連結的上一個連結回退時會跳過
<Switch> 只渲染出第一個與當前訪問地址匹配的 <Route> 或 <Redirect>
為什麼 RR4 機制裡不預設匹配第一個符合要求的呢?
答:這種設計允許我們將多個<Route>組合到應用程式中,例如側邊欄(sidebars)等等。<Switch>下的子節點只能是
<Route>
或<Redirect>
元素。只有與當前訪問地址匹配的第一個子節點才會被渲染。<Route> 元素用它們的 path 屬性匹配,<Redirect>元素使用它們的 from 屬性匹配。如果沒有對應的 path 或 from,那麼它們將匹配任何當前訪問地址。單頁面應用程式最終元件的結構:BrowserRouter–>div–>連結元件和路由元件 。
!!e.target.value.trim():表示將字串轉化為Boolean值,第一個感嘆號對字串取反,第二個字串再次取反從而實現轉換。