状态未正确设置 - React Native

时间:2017-08-03 03:26:18

标签: node.js react-native

我对我从代码中获得的内容感到非常困惑。我有以下内容,应该注销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

     

[]

1 个答案:

答案 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参数。