这有效:
$.ajax({
type: "POST",
data: {"gender": "female"},
url: "http://localhost/something.php",
dataType: "json",
success:
this.setState({
someKey: someValue
})
})
这不起作用(函数包装器导致this.setState
丢失先前的this
上下文)
$.ajax({
type: "POST",
data: {"gender": "female"},
url: "http://localhost/something.php",
dataType: "json",
success: function(){ // function wrapper begins
this.setState({
someKey: someValue
})
} // function wrapper ends
})
第二种情况中的this
证明是http://localhost/something.php
访问函数包装器中的前一个this
上下文需要做什么?
答案 0 :(得分:4)
为了保留当前this
的上下文,您需要绑定success
的回调函数。
最简单的方法是使用箭头函数语法:
success: () => {
this.setState({
someKey: someValue
})
}
另一种选择是使用局部变量来存储该引用,并在成功时使用该变量:
var that = this;
$.ajax({
type: "POST",
data: {"gender": "female"},
url: "http://localhost/something.php",
dataType: "json",
success: function() {
that.setState({
someKey: someValue
})
}
})
答案 1 :(得分:-1)
你需要在访问它之前调用super(),因为在调用super()之前不会初始化它