关于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 相关文章推荐
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
js option删除代码集合
Nov 12 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
JS实现监控微信小程序的原理
Jun 15 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 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
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
深入探讨前端框架react
2015/12/09 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
微信小程序云开发之云函数详解
2019/05/16 Javascript
layui实现三级联动效果
2019/07/26 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中input()与raw_input()的区别分析
2016/02/27 Python
python如何在终端里面显示一张图片
2016/08/17 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
django初始化数据库的实例
2018/05/27 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
高山背包:High Sierra
2017/11/23 全球购物
自荐信结尾
2013/10/27 职场文书
现场施工员岗位职责
2014/03/10 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
学生会任命书范本
2015/09/21 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书