首先安装路由

  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. python访问互联网

    1.python有一个网络包urllib,里面有很多网络模块,其中我们常用的就是urllib.request (module)这个模块 2.引入要是用的模块:import urllib.request ...

  2. 课程五(Sequence Models),第二 周(Natural Language Processing & Word Embeddings) —— 1.Programming assignments:Operations on word vectors - Debiasing

    Operations on word vectors Welcome to your first assignment of this week! Because word embeddings ar ...

  3. 微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]

    自萨蒂亚·纳德拉(Satya Nadella)上任微软CEO以来,可谓是惊喜不断,仿佛让世界尤其是我们.net程序员心中又燃起了希望.先是免费提供 iOS 版和安卓版 Office:然后在 xbox ...

  4. Java多线程之一

    进程与线程 进程 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位,比如我们windows电脑上运行的一个程序就是一个进程.在传统进程中进程是资源分配和调度的一个基本单位,在后来引入线 ...

  5. [NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  6. 通用Web后台魔方NewLife.Cube

    魔方 是一个基于 ASP.NET MVC 的 用户权限管理平台,可作为各种信息管理系统的基础框架. 演示:http://cube.newlifex.com 源码 源码: http://git.newl ...

  7. 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!

    最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...

  8. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...

  9. Spring Boot (四)模板引擎Thymeleaf集成

    一.Thymeleaf介绍 Thymeleaf是一种Java XML / XHTML / HTML5模板引擎,可以在Web和非Web环境中使用.它更适合在基于MVC的Web应用程序的视图层提供XHTM ...

  10. AvosCloud的文件存储 Demo

    时间戳:201310142227 废话少说,直接上代码: package com.dannalapp.main; import com.avos.avoscloud.GetCallback; impo ...