关于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实现的检测浏览器和系统的函数
Apr 09 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 Javascript
Javascript核心读书有感之类型、值和变量
Feb 11 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
Jun 04 Javascript
详解Angularjs中的依赖注入
Mar 11 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
js指定日期增加指定月份的实现方法
Dec 19 Javascript
p5.js实现简单货车运动动画
Oct 23 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 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
模仿OSO的论坛(五)
2006/10/09 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
JavaScript 空位补零实现代码
2010/02/26 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
学习python (2)
2006/10/31 Python
Python 深入理解yield
2008/09/06 Python
Python中input和raw_input的一点区别
2014/10/21 Python
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
专升本自我鉴定
2013/10/10 职场文书
工艺员岗位职责
2014/02/11 职场文书
交通事故和解协议书
2015/01/27 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB