import { Router, Route, Link } from 'react-router'
BrowserRouter:容器组件,在其内配置Route为真正的路由方面的东西;
Route:它最基本的职责是在location与路由路径匹配时呈现相应的component;
Link:为应用程序提供声明性的、可访问的导航。(a标签)
<BrowserRouter basename="/calendar"/>
<Link to="/today"/> // renders <a href="/calendar/today">
<Link to={{
pathname: '/courses',
search: '?sort=name',
hash: '#the-hash',
state: { fromDashboard: true }
}}/>
组件基础上实现的,当我匹配上现在URL的时候会添加上馅饼的样式属性
<NavLink
to="/faq"
activeStyle={{
fontWeight: 'bold',
color: 'red'
}}>
FAQsNavLink>
// only consider an event active if its event id is an odd number
const oddEvent = (match, location) => {
if (!match) {
return false
}
const eventID = parseInt(match.params.eventID)
return !isNaN(eventID) && eventID % 2 === 1
}
"/events/123"
isActive={oddEvent}>
Event 123
这可能是在React-Router中最重要的组件了。Route最基本的职责是在location与路由路径匹配时适配合适的component
看看下面的代码大概就会明白:
<Router>
<div>
<Route exact path="/" component={Home}/>
<Route path="/news" component={NewsFeed}/>
div>
Router>
在访问 / 路径时应该会呈现如下的情况:
<div>
<Home/>
div>
在访问 /news 路径时应该会呈现如下的情况:
<div>
<NewsFeed/>
div>
这里有三种方法可以实现路由,分别是:
它们分别适合于不同的场景,通常情况下你只会用到第一种;但是这三种渲染方法都会传递三个相同的参数
//console.log(this.props)会得到如下的内容
{
match: {…},
location: {…},
history: {…},
...}
参数说明
/user/:id
后面的id为变量children:func
exact:bool
为true时,这条路径会进行精确匹配,意味着/user
只会在/user匹配而在/user/info就不会匹配
<Route strict path="/one/" component={About}/>
path | location.pathname | matches? |
---|---|---|
/one/ | /one | no |
/one/ | /one/ | yes |
/one/ | /one/tow | yes |
<Route exact strict path="/one" component={About}/>
path | location.pathname | matches? |
---|---|---|
/one | /one | yes |
/one | /one/ | no |
/one | /one/tow | no |
- loaction:object
暂空
默认渲染
<Router>
<Route path="/" component={App}>
<IndexRoute component={Home}/>
<Route path="accounts" component={Accounts}/>
<Route path="statements" component={Statements}/>
Route>
Router>
精确匹配‘/‘
"inbox" component={Inbox}>
{/* 从 /inbox/messages/:id 跳转到 /messages/:id */}
<Redirect from="messages/:id" to="/messages/:id" />
访问/inbox/messages/5,会跳转到/message/5
<Router history={hashHistory}>
<Route path="/" component={App}>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
Route>
Router>
访问/repos会先加载App组件,然后在它内部再加载Repos组件。
<App>
<Repos/>
App>
App组件应写成如下,其中this.props.children
代表子组件
export default React.createClass({
render() {
return <div>
{this.props.children}
div>
}
})
有待完善
有待完善
参考:
- 官方文档
- 阮一峰React Router使用教程
- React-Router中文文档(内容已旧)
- 余博伦react-router 4.0配置