javascript - Reactjs关于函数内跳转 this.context.router.push(path)的问题
问题描述
请教各位师兄了。我创建了一个组件Component,并在内部中的一个ajax成功回调内,写了this.context.router.push('/user/list')类似的跳转功能。同时在组件外写了Component.contextTypes={ router: React.PropTypes.object.isRequired }。ajax也成功请求了,但是页面并没有跳转,有点疑问了。。。代码结构类似:
class Component extends React.Component{ ... success: function(data) {alert(data);this.context.router.push(...) }}Component.contextTypes={ router: React.PropTypes.object.isRequired}
问题解答
回答1:是不是拿不到this?. 试试用 success()->()
回答2:这里写一下在网上查找答案时遇到的坑,同时也是为了告诉后来遇到同样或者相似问题的小白吧,还请相关帖子管理人员别删:在 Component.contextTypes这儿,我查到过有人把它以这种方式写到过组件内部:
class Component extends React.Component{ [有些人写static有些人又不写static] contentTypes: {router: React.PropTypes.object.isRequired } ... this.context.router.push(...)}
然而这么做我这儿始终出问题,就是报错 Cann’t read the property ’push’ is not defined。不太明显为啥呢,先记下来再说吧
回答3:'Cann’t read the property ’push’ is not defined'这个错误确保contextTypes写好了并且构造函数调用super是没有把context弄丢
class Component { constructor(props, context) { super(...arguments) // 这样才行,如果只写props, 会把context 弄丢,所以super时始终建议这么写 }}
相关文章:
1. MYSQL新建用户设置可以远程访问的问题2. python - 求一个在def中可以实现调用本def满足特定条件continue效果的方法(标题说不太清楚,请见题内描述)3. java - mybatis怎么实现在数据库中有就修改,没有就添加4. $fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题5. node.js - nodejs和前端JavaScript 字符串处理结果不一样是什么原因?6. mysql - SQL操作时间的函数?7. mysql - 我的myeclipse一直连显示数据库连接失败,不知道为什么8. mysql 5.7单表300万数据,性能严重下降,如何破?9. mysql 为何insert的时候会有lock wait timeout 异常10. mysql同步数据到elasticsearch用什么工具?
![$fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题](http://www.haobala.com/attached/image/news/202205/093622cb60.png)