setState是一个类组件中用来更新组件状态的一个方法,当我们调用setState时,React会执行如下的步骤:
React会将多个setState调用合并为一次更新,以提高性能,这就意味着在事件处理函数中连续调用setState可能不会立即更新状态,而是被合并后一次性处理
setState的更新是异步的,React会将状态更新进行一个排队,然后异步地将他们应用到组件的状态上
一旦状态被更新了,React会将组件的props和新的state作为参数传递给render函数,触发组件的重新渲染
如果传递一个对象给setState,React会将这个对象与组件的状态进行合并,这意味着只有对象中明确指定的属性才会被更新,其他字段会保持不变
在组件重新渲染之前,React会调用shouldComponentUpdate生命周期方法,如果shouldComponentUpdate返回了false,则不会进行更新和渲染
重新渲染完成之后,React会使用虚拟DOM来比较组件的当前状态和之前的状态,计算出实际需要变更的地方,然后更新DOM
在DOM更新之后,会调用componentDidUpdate生命周期方法
如果在渲染过程中发生了错误,React会捕获错误并停止渲染和状态更新,同时会显示错误边界中的错误信息
如果组件使用了上下文, setState也会导致使用相同上下文的组件重新渲染,即使他们没有直接出发状态更新