參考demo https://github.com/yangstar/react-router-demo.git,若是以爲對你有幫助,請star一下~react
路由配置三要素:webpack
進入和離開hook:git
配置方式es6
方法一: browserHistory.push('url') github
方法二:context對象(ps:es5與es6)web
一個 history 知道如何去監聽瀏覽器地址欄的變化, 並解析這個 URL 轉化 爲 location 對象, 而後 router 使用它匹配到路由,最後正確地渲染對應的組 件數組
IndexLink適用於根路徑跳轉瀏覽器
做用:代碼拆分 react-router
代碼對比this
點擊表單或按鈕跳轉
<form onSubmit={this.handleSubmit}>
<input type="text" placeholder="userName"/>
<input type="text" placeholder="repo"/>
<button type="submit">Go</button>
</form>
第一種方法是使用browserHistory.push
import { browserHistory } from 'react-router' // ... handleSubmit(event) { event.preventDefault() const userName = event.target.elements[0].value const repo = event.target.elements[1].value const path = `/repos/${userName}/${repo}` browserHistory.push(path) },
第二種方法是使用context
對象
es5寫法
export default React.createClass({ // ask for `router` from context contextTypes: { router: React.PropTypes.object }, handleSubmit(event) { // ... this.context.router.push(path) // 無參數 this.context.router.push({pathname: path, state: {}}) // 有參數 }, })
es寫法
import React from 'react';
// import PropTypes from 'prop-types' 或者單獨引入prop-types import { browserHistory } from 'react-router' class About extends React.Component{ constructor(props, context) { super(props, context); this.handleSubmit = this.handleSubmit.bind(this) } handleSubmit () { // browserHistory.push('/'); this.context.router.push('/') } render () { return ( <div> <input type="button" value="提交" onClick={this.handleSubmit}/> </div> ) } } About.contextTypes = { router: React.PropTypes.object } export default About
獲取參數
// 獲取參數 componentDidMount() { this.setState({ params: this.props.location.state.params }) }
方法三
// 配置參數 <Route path="newDetail/:id" component={NewDetail}></Route>
// 獲取參數 class NewDetail extends React.Component { constructor(props) { super(props); } render () { return ( <div> {this.props.params.id} </div> ) } } export default NewDetail