关于react-router/react-router-dom v4 history不能访问问题的解决


Posted in Javascript onJanuary 08, 2018

前言

最近把react-router 升级了一下, 在使用react-router-dom 是,子组件使用this.props.history  找不到了,看看官方文档,找了半天也没找到,因为我是在异步执行完后才跳转页面,需要用到push 或者replace,怎么办啊,国内知识都是你复制我的,我复制你的,都特么垃圾。只能去Google,

最终找到了答案:(看代码一目了然)

解决方法

首先使用router

import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { Provider } from 'mobx-react';
import stores from '../store/index';
import Bundle from '../components/bundle';
import Hello from 'bundle-loader?lazy!../components/hello.jsx';
// 这是按需加载,对于现在讨论的问题没有影响
const HelloAPP = () => (
 <Bundle load={Hello}>
  {(Hello) => <Hello />}
 </Bundle>
);
export default class App extends Component {
 constructor(props) {
 super(props);
 }
 render() {
 return (
  <Provider { ...stores }>
  <BrowserRouter basename="/">
   <Route path="/" component={HelloAPP}/>
  </BrowserRouter>
  </Provider>
 );
 };
}

接着是子组件的使用history

import React, { Component } from 'react';
// 需要这步,你要npm 这个,
import PropTypes from 'prop-types';
export default class Hello extends Component {
 constructor(props) {
 super(props);
 }
 // 这一步是重点
 static contextTypes = {
 router: PropTypes.object.isRequired
 };
 test = () => {
 console.log(this.context);
 setTimeout(() => {
  this.context.router.history.push("/otherPath");
 }, 1000);
 };
 render() {
 return (
  <div>
  <button onClick={this.test}>按钮</button>
  </div>
 );
 };
}

让我们看看this.context :

关于react-router/react-router-dom v4 history不能访问问题的解决

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
判断对象是否Window的实现代码
Jan 10 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
jQuery表单验证之密码确认
May 22 jQuery
js字符串倒序的实例代码
Nov 30 Javascript
layui动态表头的实现代码
Aug 22 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
浅析Vue下的components模板使用及应用
Nov 27 Javascript
JS自定义滚动条效果
Mar 13 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 #Javascript
Vue 组件(component)教程之实现精美的日历方法示例
Jan 08 #Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
Jan 08 #Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 #Javascript
webpack构建的详细流程探底
Jan 08 #Javascript
详解ES6中的代理模式——Proxy
Jan 08 #Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
Jan 08 #Javascript
You might like
php xml 入门学习资料
2011/01/01 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
pycharm远程调试openstack代码
2017/11/21 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
AUC计算方法与Python实现代码
2020/02/28 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
J2EE相关知识面试题
2013/08/26 面试题
暑假实习求职信范文
2013/09/22 职场文书
家长通知书教师评语
2014/04/17 职场文书
亲子活动总结
2014/04/26 职场文书
小摄影师教学反思
2014/04/27 职场文书
党支部换届选举方案
2014/05/08 职场文书
车队安全员岗位职责
2015/02/15 职场文书
五一晚会主持词
2015/07/01 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers