关于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 相关文章推荐
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
详解js中let与var声明变量的区别
Apr 05 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
js单线程的本质 Event Loop解析
Oct 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简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
Python简单连接MongoDB数据库的方法
2016/03/15 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python元组知识点总结
2019/02/18 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
面试后的英文感谢信
2014/02/01 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
迎新生欢迎词
2015/01/23 职场文书
安全教育的主题班会
2015/08/13 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL
德生BCL3000抢先使用感受和评价
2022/04/07 无线电