react-router-dom v^4路由、带参路由的配置
首先安装路由
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路由、带参路由的配置的更多相关文章
- 三、angular7登录请求和路由带参传递
在 app.module.ts 中引入 HttpClientModule 并注入 import {HttpClientModule} from '@angular/common/http'; impo ...
- 微信小程序路由带参
通过url带参传递 wxml <navigator url="../user/user?id={{item.id}}&name={{item.name}}">点 ...
- 同一路由带参刷新,以及params和query两种方式传参的异同
同一路由应该不叫跳转了吧,就先叫刷新好了. 需求及问题 今天做web课设有这样一个需求: 在导航栏中一项叫做教师队伍一级菜单下,有三个二级菜单,分别为教授.副教授.讲师.这三个二级菜单分别对应一个页面 ...
- 从 React Router 谈谈路由的那些事
React Router 是专为 React 设计的路由解决方案,在使用 React 来开发 SPA (单页应用)项目时,都会需要路由功能,而 React Router 应该是目前使用率最高的. Re ...
- React Router 4.0 体验
React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...
- [Web 前端] React Router v4 入坑指南
cp from : https://www.jianshu.com/p/6a45e2dfc9d9 万恶的根源 距离React Router v4 正式发布也已经过去三个月了,这周把一个React的架子 ...
- React Router V4发布
React Router V4 正式版发布,该版本相较于前面三个版本有根本性变化,遵循 Just Component 的 API 设计理念. 本次升级的主要变更有: 声明式 Declarative 可 ...
- React+React Router+React-Transition-Group实现页面左右滑动+滚动位置记忆
2018年12月17日更新: 修复在qq浏览器下执行pop跳转时页面错位问题 本文的代码已封装为npm包发布:react-slide-animation-router 在React Router中,想 ...
- vue初始化、数据处理、组件传参、路由传参、全局定义CSS与JS、组件生命周期
目录 项目初始化 组件数据局部化处理 子组件 父组件 路由逻辑跳转 案例 组件传参 父传子 子组件 父组件 子传父 子组件 父组件 组件的生命周期钩子 路由传参 第一种 配置:router/index ...
随机推荐
- Python档案袋( Sys 与 Import 模块)
Sys模块: 获取Python有关的环境变量: import sys #得到Python的一些相关路径,环境变量 #其中site-packages目录存放的是一些第三方库 #其中lib目录存放的是一些 ...
- (webpack系列二)webpack打包优化探索
虽然webpack的已经升级到了webpack4,而我们目前还在使用webpack3,但其中的优化点都大同小异,升级后同样适用. 性能优化初步原则 减小代码量 减小请求数 最大化利用浏览器缓存 这三条 ...
- 深入Vue2.x的虚拟DOM diff原理
一.前言 Vue的核心是双向绑定和虚拟DOM(下文我们简称为vdom),关于双向绑定可以参阅木琴的文章<剖析Vue原理&实现双向绑定MVVM>,vdom是树状结构,其节点为vnod ...
- 【Java提高】---通过UUID、SHA-1、Base64组合加密
通过UUID.SHA-1.Base64组合加密 该篇文章实现的最终效果是: 1)加密是不可逆的. 2)相同字符串加密产生后的字符串都不一样 3)所以要想比较两个字符串是否相等,需要用已经加过密的字符串 ...
- CentOS 7的安装详解
不多说,直接上干货! CentOS 6.5的安装详解 主流: 目前的Linux操作系统主要应用于生产环境, 主流企业级Linux系统仍旧是RedHat或者CentOS. 免费: RedHat 和Ce ...
- border-image属性把边框的背景设置为图片
一.浏览器对它的支持Firefox3.5-Firefox15 需要加-moz-前缀Firefox15以上 同样支持-moz-前缀的css代码,但是必须在css代码中加 ...
- Eureka客户端注册多网卡下IP选择问题
在使用Spring Cloud多人协作开发时有一个场景:我本机启动了Eureka注册中心,其他人机器需要将服务注册到我本机的Eureka.(服务端和客户端在不同机器上) 这时出现了一个问题:服务成功注 ...
- 函数式编程之-Partial application
上一篇关于Currying的介绍,我们提到F#是如何做Currying变换的: let addWithThreeParameters x y z = x + y + z let intermediat ...
- kafka配置项host.name advertised.host.name
遇到的问题: 在本机或者其他机器telnet IP 9092,通,使用域名也通,telnet 127.0.0.1 9092不通 host.name:按配置文件说明,是Kafka绑定的interface ...
- angular框架下的跨域问题(获取天气数据)
1.新浪天气:http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=0&city=&dfc=1&am ...