react-router基本使用

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仅仅有一个子组件。需要给Router里面加上一个div盒子。

因此我个人理解是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

作用:携带参数跳到制定的路径












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值