reactjs中的setState是asynchronous或同步

我刚刚发现,在任何组件中,this.setState()函数是asynchronous的,或者在被调用的函数完成后调用。

现在我search并find了这个博客( http://www.bennadel.com/blog/2893-setstate-state-mutation-operation-may-be-synchronous-in-reactjs.htm )

在这里,他发现setState是async(在堆栈为空时调用)或sync(在调用之后立即调用),具体取决于触发状态更改的方式。

现在这两件事情很难消化

  1. 在博客中,setState函数在函数updateState中被调用,现在触发updateState函数的东西并不是被调用的函数可以知道的东西。
  2. 为什么他们会setStateasynchronous,因为JS是单线程语言,这个setState不是WebAPI或服务器调用,所以只能在JS线程上完成。现在如果他们这样做,以便重新渲染不会停止所有事件侦听器和东西或有其他一些devise问题。

状态值更新后可以调用一个函数:

this.setState({foo: 'bar'}, () => { // Do something here. }); 

另外,如果你有很多状态一次更新,将它们全部在相同的setState分组:

 Instead of: this.setState({foo: "one"}, () => { this.setState({bar: "two"}); }); just do this: this.setState({ foo: "one", bar: "two" }); 

1.)setState操作是asynchronous的,并且为了提高性能而进行批处理。 这在setState的文档中进行了解释。

setState()不会立即改变this.state,但会创build一个挂起的状态转换。 调用此方法后访问this.state可能会返回现有的值。 无法保证setState调用的同步操作,并且调用可能会批处理以提高性能。

2.)为什么他们会使setStateasynchronous,因为JS是单线程语言,这个setState不是WebAPI或服务器调用:

这是因为setState改变了状态并导致重新渲染。 这可能是一个昂贵的操作,并使其同步可能会使浏览器无响应。
因此,setState调用是asynchronous的以及批处理以获得更好的UI体验和性能。