Javascript 使用带有承诺的setState后获取错误
代码: 执行以下代码时,我收到此错误:Javascript 使用带有承诺的setState后获取错误,javascript,react-native,Javascript,React Native,代码: 执行以下代码时,我收到此错误: onDragEnd = { (event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate }) .then(() => alert("hello")) } 如果我取消了承诺,一切都按预期进行,这意味着我很可能以错误的方式使用了承诺: undefined is not an object evaluating ('_this
onDragEnd = {
(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate })
.then(() => alert("hello"))
}
如果我取消了承诺,一切都按预期进行,这意味着我很可能以错误的方式使用了承诺:
undefined is not an object evaluating
('_this.setState({playerMarkerPositionFuture: event.nativeEvent.coordinate}).then')
setState不返回承诺。它很可能是一个void函数。
setState
接受回调,但不返回承诺
对setState的调用是异步的-不要依赖this.state在调用setState后立即反映新值。如果需要基于当前状态计算值,请传递更新程序函数而不是对象(有关详细信息,请参见下文)
(事件)=>{
this.setState({playerMarkerPositionFuture:event.nativeEvent.coordinate},()=>警报(“hello”);
}
不要在设置状态完成后使用承诺调用警报,而是使用回调
onDragEnd={
(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate })
}
试试这个
onDragEnd={(event) =>
this.setState({
playerMarkerPositionFuture: event.nativeEvent.coordinate
}, () => {
alert("hello")
})}
这是使用setState()方法的错误做法。只能使用setState()
使用回调
正确做法:
onDragEnd={(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate }).then(() => alert("hello"))}
看看这篇文章:
setState()并不总是立即更新组件。它可以批处理更新或将更新推迟到以后。这使得在调用setState()之后立即读取This.state成为一个潜在的陷阱。相反,使用componentDidUpdate或setState回调(setState(updater,callback)),这两种回调都保证在应用更新后触发
因此,您可以使用
setState(updater,callback)
在状态更改后执行代码,如果您想使用promise,可以使用另一种解决方案
onDragEnd={(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate },()=>{
alert("hello")
})
用这个
setStateAsync(state) {
return new Promise((resolve) => {
this.setState(state, resolve)
});
}
setStateAsync(state) {
return new Promise((resolve) => {
this.setState(state, resolve)
});
}
this.setStateAsync(
{playerMarkerPositionFuture: event.nativeEvent.coordinate}
)
.then(() => alert("hello"))