调用setState方法后发生了什么?

setState调用后,React会执行一个事务(Transaction),在这个事务中,React将新state放进一个队列中,当事务完成后,React就会刷新队列,然后启动另一个事务,这个事务包括执行 shouldComponentUpdate 方法来判断是否重新渲染,如果是,React就会进行state合并(state merge),生成新的state和props;如果不是,React仍然会更新this.state,只不过不会再render了。

...
constructor(props) {
  super(props)
  this.state = {
    val: 0
  }

}
componentDidMount() {
  this.setState({val: this.state.val + 1});
    console.log("componentDidMount:"+this.state.val);

    this.setState({val: this.state.val + 1});
    console.log("componentDidMount:"+this.state.val);

    this.setState({val: this.state.val + 1});
    console.log("componentDidMount:"+this.state.val);
  setTimeout(() => {
      this.setState({val: this.state.val + 1});
      console.log("componentDidMount setTimeout:"+this.state.val);
      this.setState({val: this.state.val + 1});
      console.log("componentDidMount setTimeout:"+this.state.val);
  })
}
componentDidUpdate() {
    console.log("componentDidUpdate:"+this.state.val);
}
...

// 结果
componentDidMount:0
componentDidMount:0
componentDidMount:0
componentDidUpdate:1
componentDidUpdate:2
componentDidMount setTimeout:2
componentDidUpdate:3
componentDidMount setTimeout:3

results for ""

    No results matching ""