我使用fetch使用PUT方法将一些JSON数据发送到服务器。 当且仅当服务器响应为正时,我想弹出到上一页。
这是我的代码:
async myPutFunction() {
console.log(this.props); //here props are defined!
var dataArray=[]; //array with data to be sent
//operations on dataArray
await fetch('http://myURL', {
method: 'PUT',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(dataArray)
}).then(function(res) {
if (res.status===200) {
console.log("OK!")
console.log(this.props); //here props are undefined
this.props.navigator.pop();
} else {
console.log("error: "+res.status);
}
})
}
然而,在'然后'阻止道具是未定义的,this.props.navigator.pop()会抛出异常。
我的put函数在render()中以这种方式调用:
<TouchableOpacity style={styles.saveStyle}
activeOpacity={0.5}
onPress={this.myPutFunction.bind(this)}>
<Image source={saveImg} style={{resizeMode: 'cover'}} />
</TouchableOpacity>
我无法弄清楚为什么道具在代码部分中未定义,而在myPutFunction()的其余部分中定义
答案 0 :(得分:7)
正如您对myPutFunction
所做的那样,您必须在当时的回调中bind this
then(function(res) { /*...*/}.bind(this))