首先安装路由

  npm install --save react-router-dom

新建一个router.js文件

然后我们的router.js代码如下↓

  1. import React from 'react'
  2. //这里的HashRouter是一个的路由的模式,它分为两种BrowserRouter以及HashRouter两种模式 使用的方法只是在导入时有区别,后面的代码完全一致即可
  3. import {HashRouter as Router, Route, Switch} from 'react-router-dom'
  4. import AppComponent from '../pages/App'
  5. import NewsComponent from '../pages/news'
  6. import DetailComponent from '../pages/details'
  7. import {AuthRoute} from '../assets/common/function'
  8.  
  9. export default class RouteComponent extends React.Component {
  10. render() {
  11. return (
  12. <div>
  13. <React.Fragment>//用于清除多出的div 不太明白他的作用的可以在浏览器F12查看一下即可
  14. <Router>
  15. <React.Fragment>
  16. <Switch>//只找到第一个被匹配的路由
  17. <Route path='/' component={AppComponent}></Route>//exact 表示完全匹配
  18. <Route path='/news' exact component={NewsComponent}></Route>
  19. <AuthRoute path='/detail' component={DetailComponent}></AuthRoute>//AuthRoute是使用的会员登录在以后的文章中会在详细介绍,这里改成Route即可
    </Switch>
  20. </React.Fragment>
  21. </Router>
  22. </React.Fragment>
  23. </div>
  24. );
  25. }
  26. }

然后我们去index.js文件下改变一下显示的组件

  1. import RouteComponent from './router/router';
  2. ReactDOM.render(<RouteComponent />, document.getElementById('root'));
  3. registerServiceWorker();

现在我们的基本路由就以及配置完成了,当然我们不能去URL地址栏中修改地址,

来说一下路由的跳转,目前我了解的有三种方式进行跳转

1、push方法

2、replace方法

3、Link方法

下面来详细的介绍一下他们的用法

一、push

  1. <button type="button" onClick={this.pushPage.bind(this,'/news')}>push</button>
  2. pushPage(path){
  3. this.props.history.push(path)
  4. }

二、replace

  1. <button type="button" onClick={this.replactPage.bind(this,'/news')}>replact</button>
  2. replactPage(path){
  3. this.props.history.replact(path)
  4. }

三、Link

这个方法先需要我们在引入一下

  1. import {Link} from react-router-dom
  2. <Link to='/news'>Link</Link>

现在我们的一级路由就差不多配置完成了,接下来那我们扩展一下二级路由的使用以及带参路由

根据我个人的理解其实二级路由就是在你的一个路由页面在重复的写一遍router.js里面的内容

让我们看一下代码

  1. render() {
  2. return (
  3. <div className={'App'}>
  4. <div className={'nav'}>
  5. <dl onClick={this.goPage.bind(this,'/home')}>
  6. <dt><i className={'iconfont icon-home'}></i></dt>
  7. <dd>首页</dd>
  8. </dl>
  9. <dl onClick={this.goPage.bind(this,'/fenlei')}>
  10. <dt><i className={'iconfont icon-fenlei'}></i></dt>
  11. <dd>分类</dd>
  12. </dl>
  13. </div>
  14. <Switch>
  15. <Route path={'/home'} component={Home}></Route>
  16. <Route path={'/fenlei'} component={Fenlei}></Route>
  17. </Switch>
  18. </div>
  19. );
  20. }
  1. goPage(path){
  2. this.props.history.replace(path)
  3. }

注:如果我们的路由是在另一个组件内引入进来的,我们需要如下操作

  1. import { withRouter } from 'react-router';
  2. export default withRouter(App);

这个样我们的二级路由也可以算是实现了

带参路由

  1. <button onClick={this.goPage.bind(this,'/news?cid=你需要传递的参数&name=...')}>带参路由</button>

跳转方式和上面说的是一样的

我们传递了参数在另一个页面的就需要接受它的参数

这里我新建了一个页面来定义了一个正则

  1. function localParam (search, hash) {
  2. search = search || window.location.search;
  3. hash = hash || window.location.hash;
  4. var fn = function(str, reg) {
  5. if (str) {
  6. var data = {};
  7. str.replace(reg, function($0, $1, $2, $3) {
  8. data[$1] = $3;
  9. });
  10. return data;
  11. }
  12. }
  13. return {
  14. search : fn(search, new RegExp("([^?=&]+)(=([^&]*))?", "g")) || {},
  15. hash : fn(hash, new RegExp("([^#=&]+)(=([^&]*))?", "g")) || {}
  16. };
  17. }
  18.  
  19. export {
  20. localParam
  21. }

在接受值的页面引入

  1. import {localParam} from "../assets/js/function"

这里我们使用componentWillReactiveProps生命周期接受

  1. componentWillReceiveProps (nextprops){
  2. var get = localParam(nextprops.location.search).search
  3. var cid = get.cid
  4. console.log(cid)
  5. }

我们可以看见控制台以及可以打印出来参数

react-router-dom v^4路由、带参路由的配置的更多相关文章

  1. 三、angular7登录请求和路由带参传递

    在 app.module.ts 中引入 HttpClientModule 并注入 import {HttpClientModule} from '@angular/common/http'; impo ...

  2. 微信小程序路由带参

    通过url带参传递 wxml <navigator url="../user/user?id={{item.id}}&name={{item.name}}">点 ...

  3. 同一路由带参刷新,以及params和query两种方式传参的异同

    同一路由应该不叫跳转了吧,就先叫刷新好了. 需求及问题 今天做web课设有这样一个需求: 在导航栏中一项叫做教师队伍一级菜单下,有三个二级菜单,分别为教授.副教授.讲师.这三个二级菜单分别对应一个页面 ...

  4. 从 React Router 谈谈路由的那些事

    React Router 是专为 React 设计的路由解决方案,在使用 React 来开发 SPA (单页应用)项目时,都会需要路由功能,而 React Router 应该是目前使用率最高的. Re ...

  5. React Router 4.0 体验

    React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...

  6. [Web 前端] React Router v4 入坑指南

    cp from : https://www.jianshu.com/p/6a45e2dfc9d9 万恶的根源 距离React Router v4 正式发布也已经过去三个月了,这周把一个React的架子 ...

  7. React Router V4发布

    React Router V4 正式版发布,该版本相较于前面三个版本有根本性变化,遵循 Just Component 的 API 设计理念. 本次升级的主要变更有: 声明式 Declarative 可 ...

  8. React+React Router+React-Transition-Group实现页面左右滑动+滚动位置记忆

    2018年12月17日更新: 修复在qq浏览器下执行pop跳转时页面错位问题 本文的代码已封装为npm包发布:react-slide-animation-router 在React Router中,想 ...

  9. vue初始化、数据处理、组件传参、路由传参、全局定义CSS与JS、组件生命周期

    目录 项目初始化 组件数据局部化处理 子组件 父组件 路由逻辑跳转 案例 组件传参 父传子 子组件 父组件 子传父 子组件 父组件 组件的生命周期钩子 路由传参 第一种 配置:router/index ...

随机推荐

  1. Informatica

    安装 相关专题 关于Bulk加载模式 性能调优 性能瓶颈 性能瓶颈概览 性能瓶颈之Target 性能瓶颈之Source 性能瓶颈之Mapping 性能瓶颈之Session 性能瓶颈之System 性能 ...

  2. 超声波手势识别(STM32四路超声波获取)

    超声波手势识别在市场上已经有见实现,但研究其传感器发现并不是市场上随意可见的,如果暂且考虑成本,该如何入门实现简单的手势识别呢.聊天中老师给出一个很好的提议,就是固定四个超声波,分别为上下左右,然后进 ...

  3. Swift中空合运算符、闭区间运算符、单侧区间、半开区间

    空合运算符(Nil Coalescing Operator) 用于取代3目判空运算,提供超短的写法比如常规判空写法如下,反正我写java就是这么干的 var anOptionalInt: Int? = ...

  4. Python——爬虫进阶

    课程内容 Python爬虫——反爬 Python加密与解密 Python模块——HashLib与base64    Python爬虫——selenium模块 Python——pytessercat识别 ...

  5. HashTable原理与源码分析

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! HashTable内部存储结构 HashTable内部存储结构为数组+单向链 ...

  6. kafka配置项host.name advertised.host.name

    遇到的问题: 在本机或者其他机器telnet IP 9092,通,使用域名也通,telnet 127.0.0.1 9092不通 host.name:按配置文件说明,是Kafka绑定的interface ...

  7. centos7安装kafka_2.11

    1.下载 官网地址:http://kafka.apache.org/downloads.html 下载:wget https://www.apache.org/dyn/closer.cgi?path= ...

  8. Web前端课程设计——个人主页

    大三上学期期末总结,嗯,没错,是上学期,写在新学期开始hhh. 上学期学了一门HTML5+CSS3的课程,也叫Web前端技术,期末的课程设计是写一个个人主页,能够在浏览器中打开的静态网页.通过一学期的 ...

  9. Perl导入代码文件

    从函数复用开始:eval和do执行perl文件 当我们定义了一个功能比较通用的子程序,比如获取数值的绝对值.想要到处使用这个子程序,就得不断复制.粘贴这段绝对值函数的定义文本.显然,这是不太理想的方式 ...

  10. python按引用赋值和深、浅拷贝

    按引用赋值而不是拷贝副本 在python中,无论是直接的变量赋值,还是参数传递,都是按照引用进行赋值的. 在计算机语言中,有两种赋值方式:按引用赋值.按值赋值.其中按引用赋值也常称为按指针传值(当然, ...