react-router4.0+ 路由基本使用案例-1

2019年6月28日
先看页面效果
react-router4.0+的基本使用.gif

image.png

可以看到现在的react-router 版本已经到达了5.0.1了,相对于之前的版本有较大的改动,现在react路由系统已经逐渐像组件那样使用了。本人对之前版本的路由基本上没有多少了解。现在由于项目需要使用开始学习路由的使用,因此可能也会有不少理解不对的地方,希望读者指出错误和不足之处。

以下是路由的基本使用,这个例子官网也有,这里基本上没有太多的改动。里面包含以下几个功能

  1. 基本的页面跳转,不带参数
  2. 嵌套路由,子路由里面有带参数跳转
import React, { Component } from 'react'
import { BrowserRouter as Router, Route, Link } from 'react-router-dom'

class BasicExample extends Component {
  render() {
    return (
      <Router>
        <ul>
          <li><Link to="/">首页</Link></li>
          <li><Link to="/about">关于</Link></li>
          <li><Link to="/topics">话题</Link></li>
        </ul>
        <hr />

        <Route exact path="/" component={Home}></Route>
        <Route path="/about" component={About}></Route>
        <Route path="/topics" component={Topics}></Route>
      </Router>
    )
  }
}

class Home extends Component {
  render() {
    return (
      <div>我是Home</div>
    )
  }
}
class About extends Component {
  render() {
    return (
      <div>我是About</div>
    )
  }
}
class Topics extends Component {
  componentDidMount(){
    console.log('Topics', this.props)
  }
  render() {
    let { match } = this.props
    return (
      <div>
        <div>我是Topics</div>
        <ul>
          <li><Link to={`${match.url}/first`}>first</Link></li>
          <li><Link to={`${match.url}/second`}>second</Link></li>
          <li><Link to={`${match.url}/third`}>third</Link></li>
        </ul>

        <Route path={`${match.url}/:topicId`} component={Topic}></Route>
        <Route 
          exact
          path={match.url}
          render={() => <h3>请选择一个话题</h3>}
        >
        </Route>
      </div>
    )
  }
}

class Topic extends Component {
  componentDidMount() {
    console.log('Topic', this.props)
  }
  render() {
    let { match } = this.props
    return (
      <div>params参数 topicId: {match.params.topicId}</div>
    )
  }
}
export default BasicExample

注意路由渲染是有优先级顺序的,可能会有同一个当前URL匹配多个。
例如第一个根路径 “/”,如果它的里面不加exact属性,则它对应的组件总是会被匹配到渲染到页面上。exact属性的意思就是:当前URL必须完全匹配,"/“只会匹配到 “/”,而类似”/aaa"的其他URL是不会被匹配到的。

使用路由跳转的组件,它的props里面会多出三个对象
在这里插入图片描述

  • props.history

这个属性和window.history 属性是一样的,可以对浏览器历史记录进行操作

  • props.match

这个里面如果配置的是动态路由,则需要的参数在它的params对象里面

  • props.location

如果url里面传入了查询字符串,则查询字符串会包含在search对象里,并且它是一个原始的查询字符串,例如"?id=1&age=18",需要自己解析其中的键值对

以上就是简单的使用了,后面还会记录其他用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值