我对我从代码中获得的内容感到非常困惑。我有以下内容,应该注销data.points
,然后将this.state.points
设置为data.points
,然后注销this.state.points
,但是当它注销时它们不相等。这是我正在使用的完全代码,因此我确信它是输出的内容。我可能忽略了一些东西,但我花了过去一小时阅读并注销了这段代码,我仍然无法弄明白。这是我运行的代码:
console.log(data.points);
if (!this.state.hasPressed) {
this.setState({points: data.points})
console.log('in not hasPressed if');
}
console.log(this.state.points);
但是在chrome远程调试器中,我得到了这个:
["114556548393525038426"]
in not hasPressed if
[]
答案 0 :(得分:2)
setState
是异步调用。你必须使用函数回调来等待setState
完成。
console.log(data.points);
if (!this.state.hasPressed) {
this.setState({points: data.points}, () => {
console.log(this.state.points);
});
console.log('in not hasPressed if');
}
请参阅react-native setState() API:
setState(更新程序,[回调])
setState()并不总是立即更新组件。有可能 批量或推迟更新,直到稍后。这使得阅读this.state 在调用setState()之后发生了潜在的陷阱。相反,使用 componentDidUpdate或setState回调(setState(更新程序, 回调)),其中任何一个都保证在更新后触发 已经应用。如果需要根据以前的状态设置状态 state,请阅读下面的updater参数。