新的React Router 從 React 汲取了很多思想和理念,它所提供的路由都可以看成是一個組件。
本次升級的主要變更有:
- 聲明式 Declarative
- 可組合 Composability
React Router V4 基于 Lerna 管理多個 Repository。在此代碼庫包括:
react-router: React Router 核心
react-router-dom: 用于 DOM 綁定的 React Router
react-router-native: 用于 React Native 的 React Router
react-router-redux: React Router 和 Redux 的集成
react-router-config: 靜態(tài)路由配置幫助助手
在代碼中該引用哪一個
上面有那么多個,我們應(yīng)該在代碼中引入哪一個?
在代碼中我們引入react-router-dom即可,因為react-router-dom 比 react-router多了<BrowserRouter>,<HashRouter>,<Link>,<NavLink>等一些DOM 類組件,直接引入這個比較方便使用。
新的react-router和以前的用法有什么區(qū)別
<Router>
Router是所有路由組件共用的底層接口,一般我們的應(yīng)用并不會使用這個接口,而是使用高級的路由:
<BrowserRouter>
<HashRouter>
<MemoryRouter>
<NativeRouter>
<StaticRouter>
以前的用法可以在<Router>中使用多個<Route>,如下所示:
render((
<Router>
<Route path="/" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</Router>
), document.getElementById('app'))
但在最新的版本中,會出如下的錯誤:

<Router>組件下只允許存在一個子元素,將多個<Route>包裹在<div>標(biāo)簽里,修改如下:
render((
<Router>
<div>
<Route path="/" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</div>
</Router>
), document.getElementById('app'))
<Router>的引入方式
下面的三種方式都可以;
import {BrowserRouter as Router} from 'react-router-dom'
import Router from 'react-router-dom/BrowserRouter'
import { BrowserRouter } from 'react-router-dom'
<Route>
Route組件主要的作用就是當(dāng)匹配路由的path時,渲染某些UI。
有3種方法來渲染內(nèi)容·:
- < Route component>
只有在地址匹配的時候React的組件才會被渲染,路由會根據(jù)指定的組件使用React.createElement來創(chuàng)建一個新的React element<Route path="/user/:username" component={User}/> const User = ({ match }) => { return <h1>Hello {match.params.username}!</h1> } - < Route render>
使用render屬性,你可以選擇傳一個在地址匹配時被調(diào)用的函數(shù),而不會新創(chuàng)建一個像component一樣的React element<Route exact path="/topics" render={() => ( <h3>Please select a topic.</h3> )}/> - < Route children>
有時候你可能想不管地址是否匹配都渲染一些內(nèi)容,這種情況你可以使用children屬性。它與render屬性的工作方式基本一樣。<Route path="aaa" children={() => ( <h3>hello children</h3> )}/>
這三種渲染方法都會獲得相同的三個的屬性:
-
match
match 對象包含了 <Route path> 如何與URL匹配的信息。match 對象包含以下屬性:- params -( object 類型)即路徑參數(shù),通過解析URL中動態(tài)的部分獲得的鍵值對。
- isExact - 當(dāng)為 true 時,整個URL都需要匹配。
- path -( string 類型)用來做匹配的路徑格式。在需要嵌套 <Route> 的時候用到。
- url -( string 類型)URL匹配的部分,在需要嵌套 <Link> 的時候會用到。
-
location
Location 是指你當(dāng)前的位置,下一步打算去的位置,或是你之前所在的位置 - history
一個例子
更多的用法,待續(xù)......
參考
https://github.com/react-translate-team/react-router-CN
初探 React Router 4.0
http://www.itdecent.cn/p/e3adc9b5f75c
React Router V4 系列專欄(一)
https://github.com/iuap-design/blog/issues/176
React Router v4 入坑指南
http://www.codezhan.com/Front-end/2017/0707/8293.html
http://www.itdecent.cn/p/27ee7df4ccc1