关于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 相关文章推荐
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
Mar 24 jQuery
vuejs2.0子组件改变父组件的数据实例
May 10 Javascript
vue.js实例todoList项目
Jul 07 Javascript
js中的闭包学习心得
Feb 06 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
Sep 01 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
JavaScript数值类型知识汇总
Nov 17 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
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Python中的并发编程实例
2014/07/07 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
python验证码识别实例代码
2018/02/03 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
10款最好的Python开发编辑器
2019/07/03 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
python/golang 删除链表中的元素
2020/09/14 Python
详解Python yaml模块
2020/09/23 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
日语求职信范文
2013/12/17 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
交通事故调解协议书
2014/04/16 职场文书
化学专业自荐信
2014/05/28 职场文书
师德师风自查总结
2014/10/14 职场文书
2014小学年度工作总结
2014/12/20 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
KVM基础命令详解
2022/04/30 Servers