others - Javascript - promise在使用setState后,得到错误

代码:


onDragEnd = {


 (event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate })


 .then(() => alert("hello"))


}



当执行下面的代码时,我将收到此错误:


undefined is not an object evaluating


('_this.setState({playerMarkerPositionFuture: event.nativeEvent.coordinate}).then')



如果我删除Promise,所有的工作都按预期工作,那么它意味着我可能以错误的方式使用Promise :


onDragEnd={


 (event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate })


}




时间:

setState接受回调,但是,它不返回Promise ,查看文档

调用setState是异步的-不依赖this.state,在调用setState后会立即反映新值,如果需要根据当前状态(详情见下面)计算值,则传递更新器函数而不是对象。


 (event) => {


this.setState({playerMarkerPositionFuture: event.nativeEvent.coordinate }, () => alert("hello"));


}



不要在setState完成后,使用Promise来调用警报,而且是使用回调,


onDragEnd={(event) => 


this.setState({ 


 playerMarkerPositionFuture: event.nativeEvent.coordinate 


}, () => {


 alert("hello")


})}




onDragEnd={(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate }).then(() => alert("hello"))}



这是使用setState()方法的错误实践,你只能使用setState()使用回调。

正确练习:


onDragEnd={(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate },()=>{


 alert("hello")


})



请查看本文:

https://medium.com/@voonminghann/when-to-use-callback-function-of-setstate-in-react-37fff67e5a6c

如果你想使用Promise 。另一个解决方案可能是


setStateAsync(state) {


 return new Promise((resolve) => {


 this.setState(state, resolve)


 });


 }



并使用它。 。 。


this.setStateAsync(


 {playerMarkerPositionFuture: event.nativeEvent.coordinate}


 )


.then(() => alert("hello"))



试试这个


onDragEnd={(event) => this.setState({ playerMarkerPositionFuture: event.nativeEvent.coordinate },() => alert("hello"))}



...