Javascript React是否在setState回调中绑定此项?

Javascript React是否在setState回调中绑定此项?,javascript,reactjs,this,Javascript,Reactjs,This,当单击“无绑定”按钮时,我希望看到undefined被记录下来,因为当您以回调的形式简单地传递方法引用时,不应该使用右侧的this上下文调用它,而应该使用箭头函数调用它 但是,我看到回调函数可以访问this,并且this.state.number的值被正确记录。方法引用和箭头函数的执行方式完全相同。为什么? 这与arrow函数类属性无关,而是将对方法的引用作为回调传递给setState,而不是arrow函数。 类Hello扩展了React.Component{ 建造师(道具){ 超级(道具);

当单击“无绑定”按钮时,我希望看到
undefined
被记录下来,因为当您以回调的形式简单地传递方法引用时,不应该使用右侧的
this
上下文调用它,而应该使用箭头函数调用它

但是,我看到回调函数可以访问
this
,并且
this.state.number
的值被正确记录。方法引用和箭头函数的执行方式完全相同。为什么?

这与arrow函数类属性无关,而是将对方法的引用作为回调传递给
setState
,而不是arrow函数。

类Hello扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
编号:1,
};
}
OnClickWithThisBindingCallback=()=>{
this.setState({number:2},()=>{this.myCallback();});
};
OnClickwithout thisBindingCallback=()=>{
const myCb=this.myCallback;
this.setState({number:3},myCb);
};
myCallback(){
console.log(this.state.number);
}
render(){
返回(
有约束力
无约束力
);
}
}
ReactDOM.render(
,
document.getElementById('容器')
);

React使用组件的实例
this
调用
setState
的回调函数,如所示


信用证:

这是因为您被赋予了lambda函数:

onClickWithThisBinding = () => {

lambda函数在给定的上下文中执行。因此绑定实际上是
onClick={()=>{..}
。这就是为什么它有
这个
上下文。

这是由于使用了arrow函数

箭头函数始终具有与其周围代码相同的
。 看更多

如果希望该方法不绑定到该特定类,可以使用这样的普通函数

onClickWithoutThisBinding() {
    const myCb = this.myCallback;
    this.setState({ number: 3 }, myCb);
};

我想说最好在社区wiki上标记它。而且,这并不是因为它绑定了
this
。它只是在调用
setState
时使用了正确的方法。令人震惊的是,这并不能说明(从而保证)它。@t.J.Crowder提出。关键是myCallback是如何使用的。onClickWithoutThisBinding的绑定引用的是myCallback,而不是函数本身。
this.myCallback
在arrow函数中,调用
onClickWithoutThisBinding
时,将引用类
Hello
。如果您不使用箭头函数,它将绑定到类
按钮
,因此将被取消定义。我认为您不理解这里的问题。问题是关于myCallback的这个问题是的,我知道了,但是,正如你写的那样,
this.myCallback
onClickWithThisBinding
onClickWithoutThisBinding
中都是一样的。您必须更改使用this.myCallback的函数的作用域。如果你有一个运行的例子,我建议尝试一下哦,现在我明白了,我花了一段时间