setState是队列数据结构吗?

时间:2016-03-24 16:32:22

标签: reactjs

假设:

cb.setText(String.valueOf(this.position));

this.setState({"data1": ''}); this.setState({"data2": ''}); this.setState({"data3": ''}, this.runMeAfterAllStateUpdatesComplete); 是队列数据结构(FIFO)吗?换句话说,上述代码是安全的,因为setState将在所有情况下运行最后?或者我是否需要将代码编写为一系列回调:

runMeAfterAllStateUpdatesComplete

或者假设幂等:

  this.setState({"data1": ''}, this.setNext);
  setNext(){
     this.setState({"data2": ''}, this.setNextNext);
  }
  setNextNext() {
     this.setState({"data3": ''}, this.runMeAfterAllStateUpdatesComplete);
  }

1 个答案:

答案 0 :(得分:0)

第一个代码绝对不安全:setState是异步操作 在调用第一个setState之后,反应将在某个时刻重新渲染。因此无法判断第二个setState是否以及何时会触发。

第三个代码段也存在同样的问题,因为它还连续有多个setState

第二个版本可能会有效,但我建议不要以这种方式在回调中做另一个setState

正如评论中所建议的那样,对链状态的更多反应方式可能是这样的:

componentDidUpdate() {
  if (this.state.data3) {
    this.runMeAfterAllStateUpdatesComplete();
  } else if (this.state.data2) {
    this.setState({ data3 : '' });
  } else if (this.state.data1) {
    this.setState({ data2 : '' });}
  }
}