我正面临与setState
相关的怪异错误。我知道它是异步的,因此我在console.log(this.state)
的{{1}}函数中添加了callback
,但是状态保持不变,并且应用程序上未反映任何更改。这是代码:
setState
if (response && response.data && response.data.data) {
if (this._isMounted) {
const arrangedSenderEmailAddresses = arrangeEmailAddresses(response.data.data);
console.log('update data: ', arrangedSenderEmailAddresses);
this.setState({ emailAddresses: arrangedSenderEmailAddresses }, () => {
console.log('state after update: ', this.state.emailAddresses);
});
}
}
是从后端检索的对象。
response
显示应在状态下但应在回调中设置的新数据:
console.log('update data: ', arrangedSenderEmailAddresses)
显示旧状态。
有人遇到这样的错误吗?
答案 0 :(得分:0)
即使在回调中,它也将使用状态的先前值,因为您将this.state
传递到控制台日志,该日志不会在该回调中得到重新评估,但会获得旧状态
来自React docs:
setState()的第二个参数是可选的回调函数,将在setState完成并重新渲染组件后执行。 通常,我们建议对这种逻辑使用componentDidUpdate()。