哪些方法会触发 React 重新渲染?重新渲染 render 会做些什么 ?

在 React 中,以下几种情况会触发组件的重新渲染:

  1. 状态更新:当组件的状态(state)被更新时(通常是通过 setStateuseState 的更新函数),React 会调度重新渲染该组件。

  2. Props 变化:当父组件传递给子组件的 props 发生变化时,子组件会被重新渲染。

  3. 父组件重新渲染:如果一个组件的父组件被重新渲染,那么这个组件也会被重新渲染,除非这个组件实现了 shouldComponentUpdate 方法或使用 React.memo 来阻止不必要的渲染。

  4. Context 变化:如果组件订阅了某个 context,当这个 context 的值发生变化时,组件会被重新渲染。

  5. 强制更新:通过调用组件实例的 forceUpdate 方法,我们可以强制重新渲染组件,即使状态和 props 都没有变化。

当一个组件被重新渲染时,React 会执行以下步骤:

  1. 调用 render 方法:React 会调用组件的 render 方法(或函数组件的主体),得到描述组件 UI 的 React 元素。

  2. 比较新旧元素:React 会将新的 React 元素与上一次渲染的元素进行比较。如果元素类型和 key 相同,React 会认为这是同一个元素,只需要更新元素的 props;如果元素类型或 key 不同,React 会销毁旧元素,创建并挂载新元素。

  3. 更新 DOM:根据新旧元素的比较结果,React 会生成一份 “变更” 列表,然后应用这些变更到真实的 DOM 上,以使得 DOM 的状态与新的 React 元素相匹配。

请注意,React 使用了一种称为 “调和”(Reconciliation)的算法来决定哪些部分需要更新,这使得 React 可以高效地更新和渲染组件,而不需要重新渲染整个应用。

发表评论

后才能评论