React-Router 的安裝
npm install react-router
React-Router提供了兩個組件:Router和Route。下面看最簡單的例子:
src/Routes.js
1 import React from 'react'
2 import {Router,Route,browserHistory} from 'react-router'
3
4 import Home from './pages/Home.js'
5 import About from './pages/About.js'
6 import NotFound from './pages/NotFound.js'
7
8 const history = browserHistory;
9 const Routes = () =>(
10 <Router history = {browserHistory}>
11 <Route path = "home" component = {home}>
12 <Route path = "about" component = {About}>
13 <Route path = "*" component = {NotFound}>
14 </Router >
15 );
16 export default Routes;
Routes.js文件返回一個組件,該組件輸出一個Router組件實例,路由及其規則都封裝在里面,Route組件內的path和component把路徑和組件對應起來。
路由鏈接:
HTML的鏈接被點擊時會發生默認跳轉,這不符合單頁面應用的要求,所以React-Router提供了一個<Link>組件來支持路由鏈接。
1.<link>組件產生html鏈接。
2.對該鏈接的點擊不會引發跳轉,而是把目標路徑發送給Router,讓Router依據關聯顯示對應的組件。
3.<Link>組件的to指向一個路徑,對應的路徑在Router中應該有定義。
1 import React from 'react'
2 import {Link} from 'react-router'
3
4 const view = ()=>{
5 <div>
6 <ul>
7 <li><Link to="/home">Home</Link></li>
8 <li><Link to="/about">About</Link></li>
9 </ul>
10 </div>
11 };
嵌套:
Route提供了嵌套功能。路由的嵌套和組件層級的顯示是對應的。當我們觸發了子路由的跳轉時,父層路由顯示的東西可以依然保留在頁面上,只有子層路由對應的組件發生變更。
比如在src/pages/App.js中定義組件App:
1 import React from 'react'
2 import {view as TopMenu} from '../components/TopMenu'
3
4 const App = ({children}) =>{
5 return (
6 <div>
7 <TopMenu />
8 <div>{children}</div>
9 </div>
10 )
11 }
12 export default App
上面代碼中children是App的子組件。這是React中原生的特性。
React-Router中路由嵌套需要組件和Route的雙邊設置:
在組件中將children獲得的子組件在恰當位置渲染;
在Route中 ,則是設置嵌套的<Route>
1 const Routes = ()=>(
2 <Router history = {browserHistory}>
3 <Route path = "/" component = {App}>
4 <Route path = "hone" component={home} />
5 <Route path = "hone" component={home} />
6 <Route path = "hone" component={home} />
7 </Route>
8 </Route>
9 );
