react-router
使用React router
npm install react-router --save
之後開啟client.js
改為下面,看是否仍正常啟動
import React from 'react'
import ReactDOM from 'react-dom'
import App from '../components/App'
import { Router, Route, hashHistory } from 'react-router'
ReactDOM.render((
<Router history={hashHistory}>
<Route path="/" component={App}/>
</Router>
),document.getElementById('app'))再改為下面看看
Client.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from '../components/App'
import Proptest from '../components/Proptest.js';
import TextDisplay from '../components/TextDisplay'
import { Router, Route, hashHistory } from 'react-router'
ReactDOM.render((
<Router history={hashHistory}>
<Route path="/" component={App}/>
<Route path="/TextDisplay" component={TextDisplay}/>
<Route path="/Proptest" component={Proptest}/>
</Router>
),document.getElementById('app'))Proptest.js
TextDisplay.js
到路徑http://localhost:3000/#/TextDisplay
即可看到,元件的切換
(發現頁面切換元件很快速,我們以前要做到這樣必須用AJAX,或模板引擎內的動態compile(一樣是AJAX加載), 而React沒用到ajax,是在client端計算更改的virtual DOM後更新到DOM上)
2.Link
接著到App.js加上
即可看到點選li跳至不同元件,及更改了url
3.我們現在想讓App.js變成一個nav然後點選後App.js不動,在他的下面render不同的component,所以我們要把route改為巢狀
client.js
App.js
,因為今天兩個component在client.js下為App.js的子代,所以要用{this.props.children}去顯示 (更改後記得重新整理)
4.
幫link 加上active時的style
App.js
或是像原本一樣寫
active時的css也可以
5.像Express 使用參數url
新增一個元件Repo.js
更改Client.js
之後在url輸入http://localhost:3000/#/repo/this/is 即可
PS:巢狀route,當url是子代時,會把所有的父代component都render出
7.消除原本在url上的#
#將hash history改為browser history
Client.js
參考: https://github.com/reactjs/react-router/blob/master/docs/guides/Histories.md#configuring-your-server
參考至
https://github.com/reactjs/react-router-tutorial/tree/master/lessons/02-rendering-a-route
Last updated
Was this helpful?