我有一个名为的类iccSdk
,其名称为on
。现在在我的React中render
,我正在调用该函数iccSdk.on()
。此外,我想从此函数中调度一个动作,因此我尝试使用它,this.props.actions.chatConnect(data);
但是this
在这里变得不确定。
第一次尝试:
render() {
console.log(this);
iccSdk.on('connect', function(data) {
console.log(this);
this.props.actions.chatConnect(data);
});
...
}
在上述情况下,this
该函数内部显示为undefined,但在我的iccSdk.on()函数外部看起来不错。
第二次尝试:
render() {
var t = this;
iccSdk.on('connect', function(data) {
t.props.actions.chatConnect(data);
});
...
}
在第二次尝试中,它工作正常,但我怀疑这样做是否是一种好习惯,而且我也感到困惑,为什么this
无法在我的iccSdk.on()内部访问
函数创建一个新的作用域。因此,上下文(= this)是不同的或不存在。您的第二种方法很好。
其他执行此操作的方法:
箭头功能:
箭头函数不会为该函数创建新的上下文。因此,您可以在函数内部使用相同的this。为此,需要ES6。
render() {
console.log(this);
iccSdk.on('connect', data => {
console.log(this);
this.props.actions.chatConnect(data);
});
...
}
装订
使用bind函数,您可以将“ this”绑定到您的函数。
render() {
console.log(this);
iccSdk.on('connect', function(data) {
console.log(this);
this.props.actions.chatConnect(data);
}.bind(this));
...
}
thisArg
iccSdk.on也可能会使用“此参数”。我不确定是否可以。您可以在此处阅读有关thisArg的更多信息:https ://h3manth.com/new/blog/2014/thisarg-in-javascript/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句