首先安装路由

  npm install --save react-router-dom

新建一个router.js文件

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

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

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

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

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

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

1、push方法

2、replace方法

3、Link方法

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

一、push

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

二、replace

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

三、Link

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

 import {Link} from “react-router-dom”
<Link to='/news'>Link</Link>

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

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

让我们看一下代码

 render() {
return (
<div className={'App'}>
<div className={'nav'}>
<dl onClick={this.goPage.bind(this,'/home')}>
<dt><i className={'iconfont icon-home'}></i></dt>
<dd>首页</dd>
</dl>
<dl onClick={this.goPage.bind(this,'/fenlei')}>
<dt><i className={'iconfont icon-fenlei'}></i></dt>
<dd>分类</dd>
</dl>
</div>
<Switch>
<Route path={'/home'} component={Home}></Route>
<Route path={'/fenlei'} component={Fenlei}></Route>
</Switch>
</div>
);
}
 goPage(path){
this.props.history.replace(path)
}

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

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

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

带参路由

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

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

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

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

function localParam (search, hash) {
search = search || window.location.search;
hash = hash || window.location.hash;
var fn = function(str, reg) {
if (str) {
var data = {};
str.replace(reg, function($0, $1, $2, $3) {
data[$1] = $3;
});
return data;
}
}
return {
search : fn(search, new RegExp("([^?=&]+)(=([^&]*))?", "g")) || {},
hash : fn(hash, new RegExp("([^#=&]+)(=([^&]*))?", "g")) || {}
};
} export {
localParam
}

在接受值的页面引入

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

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

componentWillReceiveProps (nextprops){
var get = localParam(nextprops.location.search).search
var cid = get.cid
console.log(cid)
}

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

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. 解决关于 vue项目中 点击按钮路由多了个问号

    问题描述: 在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的 ...

  2. 解决关于ios访问相机闪退问题

    在mac上的ionic3项目打包成苹果app,系统版本是10.3.3 . 当调用相机的时候出现闪退情况,这是调试出现的问题: This app has crashed because it attem ...

  3. Java垃圾回收(GC)机制详解

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

  4. [Jenkins]JDK版本过高导致的java.io.IOException: Remote call on xxxx failed

    ------------------------------------------------------ 如需转载,请注明出处. 文章链接:https://www.cnblogs.com/dzbl ...

  5. [WebKit内核] JavaScriptCore深度解析--基础篇(一)字节码生成及语法树的构建

    看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>,写的很好,深受启发.想补充一些Horkey没有写到的 ...

  6. Mybatis解析mapper

    众所周知,接口是不能被实例化的,但是日常开发中,我们经常能直接使用dao层对象的方法,这又是为什么呢. 带着这些问题,我们看下mybatis内部做了那些操作. Mapper解析 上文我们描述了myba ...

  7. Mysql 调优和水平扩展思路

    系统调优参数 一些比较重要的参数: back_log:back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中.如果MySql的连接数据达到max_connecti ...

  8. python练习三—解析xml

    使用python解析xml,主要使用sax的ContentHandler中的标签开始和标签结束的方法驱动,然后在开始(或者结束)事件中决定使用什么处理方法,使用dispatcher来决定并分发到指定方 ...

  9. mysql年初至今聚合

    年初至今聚合和滑动聚合类似,不同的地方仅在于统计的仅为当前一年的聚合.唯一的区别体现在下限的开始位置上.在年初至今的问题中,下限为该年的第一天,而滑动聚合的下限为N个月的第一天.因此,年初至今的问题的 ...

  10. More Effective C# 【前戏】

    买了很多很多书,想到就买,觉得有需要就买.买书的情况是不一样的:有时候,买的时候还是比较空,买来之后工作开始忙起来了,就没怎么看:有时候,买的时候比较忙,忙的乱了方寸,觉得有必要找本书来静心一下.不过 ...