react-router网站 http://reacttraining.cn/
学习react-router中遇到的问题
1.这段代码会存在啥问题呢?
render () { return ( <Router> <ul> <li> <Link to="/">首页</Link> </li> <li> <Link to="/about">关于</Link> </li> <li> <Link to="/themes">主题</Link> </li> </ul> <Route exact path="/" component = { Home } /> <Route path="/about" componnet={ About } /> <Route path="/themes" component={ Themes } /> </Router> ) }报错如下:
A <Router> may have only one child element
因此我个人理解是Router只是个外壳,并不是一个容器。里面的div才是容器。
实现的效果:
代码如下:
import React,{ Component } from 'react'; import { BrowserRouter as Router, Route, Link, } from 'react-router-dom'; const Home = ()=> ( <div>首页</div> ) const About = ()=>( <div>关于</div> ) const Themes = ({ match })=>( <div> <h3>主题列表</h3> <ul> <li><Link to={ `${match.url}/rendering` }>渲染</Link></li> <li><Link to={ `${ match.url }/status`}>状态</Link></li> <li><Link to={ `${ match.url }/angular`}>Angular</Link></li> </ul> <Route path={ `${ match.url }/:id` } component={ Theme } /> <Route exact path={ `${ match.url }`} render={ ()=> { return <div>请选择一个主题</div> }} /> </div> ) const Theme = ({ match }) => ( <div> { `${match.params.id }` } </div> ) class BasicUse2 extends Component { constructor(props) { super(props); this.state = { } } render () { return ( <Router> <div> <ul> <li> <Link to="/">首页</Link> </li> <li> <Link to="/about">关于</Link> </li> <li> <Link to="/themes">主题</Link> </li> </ul> <Route exact path="/" component = { Home } /> <Route path="/about" componnet={ About } /> <Route path="/themes" component={ Themes } /> </div> </Router> ) } } export default BasicUse2;需要理解的地方有:
(1)match 这里match是一个match对象,这也是作者为什么{ match } 这样写的原因。
(2) `${ match.url }/rendering` 完整的路径,匹配到这个路径,才是显示相应的组件。
(3)const Home = ()=( <div>首页</div>) 这里我用的是小括号,还可以这样写的,
const Home = ()=> { return <div>首页</div> }
<Route>
<Route>也许是RR4最重要的组件了,它最基本的作用是:当页面的访问地址和Router的path相匹配时,就渲染出对应的UI界面。
<Route>自带3个render method 和3个props
render method 分别是:
<Route component >
<Route render>
<Route children>
props 分别是:
match
location
history
component
只有访问地址和路由匹配时,一个React Component才能被渲染。
render: func
此方法适用于内联渲染,而且不会出现重复装载的问题。
children
有时你只想知道访问地址是否匹配,然后改变下别的东西,而不仅仅是对应的页面。
path
需要匹配的路径
exact
唯一匹配之后,展示对应的组件
strict:bool
对路径末尾斜杠的匹配。
<Link>
为你的应用提供声明式,无障碍导航。
to: string
作用: 跳转到制定路径。
使用场景: 如果是单纯的跳转就用字符串形式的路径。
<Link to="/about" />to: object
作用:携带参数跳到制定的路径