关于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 相关文章推荐
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
Sep 10 Javascript
ES6字符串的扩展实例
Dec 21 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php header功能的使用
2013/10/28 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
python脚本替换指定行实现步骤
2017/07/11 Python
python实现批量修改文件名代码
2017/09/10 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
信号生成及DFT的python实现方式
2020/02/25 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
深入浅析Python代码规范性检测
2020/07/31 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
2015年初中元旦晚会活动总结
2014/11/28 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
5个实用的JavaScript新特性
2022/06/16 Javascript