首页 > 代码库 > React Router
React Router
路由可以向应用中快速的添加视图和数据流,同时保持页面与URL同步
import {Router ,Route, Link} from ‘react-router‘ class App extends React.Component { render(){ return ( <div> <ul > <li><Link to=‘/about‘>About</Link></li> <li><Link to=‘/inbox‘>Inbox</Link></li> </ul> {this.props.children} </div> )}})
//获取URL参数
class Message extends React.Component{
componentDidMount(){
const id = this.props.params.id //来自于路径 ‘/inbox/messages/:id‘
fetchMessage(id,function(err,message){
this.setState({message:message})
})
}
render(){
return(
<div>
<h3>message{this.props.params.id}</h3>
</div>
}
React.render(( <Router> <Route path=‘/‘ component={App}> <Route path=‘about‘ component={About} /> <Route path=‘inbox‘ component={Inbox}>
<Route path=‘messages/:id component={Message} />
</Route>
</Route> <Router> ).document.body);
以上获取URL参数方法:
1 id = this.props.params.id 来自父组件路径path=‘/index/message.:id‘
2 baz= this.props.location.query.bar 访问路径为 /foo?bar=baz 时,获取baz的值
添加首页:IndexRouter 设置默认页面,当App的render中this.props.children还是undefined时显示
<IndexRoute component={Dashboard}/>
简洁的URL:使用绝对路径,无需在URL中添加更多的层级,从而可以使用更简洁
<Route path=‘/messages/:id‘ component={Message}/> 但其可能在动态路由中无法使用
重定向Redirect
<Redirect from=‘message/:id‘ to=‘/message/:id‘/>
当有人点击/inbox/message/5时,会跳到/message/5,以防/inbox/message/5不存在
onEnter和onLeave进入和离开的hook,在页面跳转确认时触发。例如 权限验证,或数据持久保存
onLeave hook 在所有将离开的路由中触发,从最下层的字路由开始到最外层的父路由结束。
onEnter hook从最外层的父路由开始到最下层的字路由结束
例如:从/messages/5跳到/about,hook的执行顺序:/messages/:id的onLeave->/inbox的onLeave->/about的onEnter
路径语法
:paramName 匹配位于/ ? # 之后的URL;称作参数
() 在其内部的内容是可选的
* 匹配任意字符
React Router