当你调用 setState 的时候,发生了什么

当调用组件的 setState() 方法时,React 会将传入的状态对象合并到组件的当前状态中,然后重新渲染组件和其子组件。

具体来说,setState() 方法会将传入的状态对象与组件当前的状态进行合并。如果状态对象和当前状态对象的某个属性相同,它将被覆盖。合并完成后,React 将计划更新组件的 UI,但不会立即进行更新。实际上,React 会将更新添加到一个队列中,并在稍后执行更新。

React 会通过比较之前的虚拟 DOM 树和新的虚拟 DOM 树,来确定 UI 中哪些部分需要更新。如果组件的状态发生变化,React 将重新计算组件的虚拟 DOM 树,并将其与之前的虚拟 DOM 树进行比较,找出需要更新的部分,并将这些部分添加到更新队列中。

一旦调用 setState(),React 将会触发组件的生命周期函数,其中包括 shouldComponentUpdate()componentWillUpdate()render() 等。如果 shouldComponentUpdate() 返回 true,则会继续执行。如果返回 false,React 将跳过更新。然后,componentWillUpdate() 函数将在组件开始更新之前执行,可以在此函数中执行一些准备工作。最后,render() 函数将生成新的 Virtual DOM 树。

一旦 React 确定了需要更新的部分,它将把更新添加到一个队列中,并在稍后进行处理。React 按照一种优化算法来批量处理更新,以确保更新尽可能快地应用到 DOM 中。当更新被处理时,React 将执行组件的 componentDidUpdate() 方法,该方法允许你在组件完全更新后执行某些操作。

总之,当调用 setState() 时,React 会合并新的状态到当前状态中,然后重新计算 Virtual DOM 树和需要更新的部分,并将更新添加到队列中。在稍后的某个时间,React 将会处理这些更新,最终更新 UI。

你可能感兴趣的:(react.js)