前端/移动开发面试题更新 2026-08-05

请描述在 React 应用中,当 DOM 结构发生变化后,React 在内部会经历哪些阶段和变化?请从虚拟 DOM 的更新流程角度展开。

前端/移动开发技术原理React

考察说明

考查对 React 内部更新机制(从状态变化到 DOM 渲染)的深入理解。

回答思路

  1. 【回答框架 1】当 DOM 结构发生时,React 首先会通过 setState 或 useState 触发更新。React 会创建一个更新任务并进入调度阶段,根据任务的优先级(如同步或异步)决定何时执行。
  2. 【回答框架 2】在渲染阶段,React 会从触发更新的组件开始,递归调用函数组件或类组件的 render 方法,生成新的虚拟 DOM(React Element)树,并与之前的虚拟 DOM 树进行对比(Reconciliation,即协调)。
  3. 【回答框架 3】对比过程中,React 使用 diff 算法,通过同层比较、key 属性优化等策略,最小化需要变更的节点。对于组件类型的差异、props 的变化等,会决定是更新组件、复用组件还是卸载组件。
  4. 【回答框架 4】对于需要更新的部分,React 会进入 commit 阶段。在此之前,React 会收集副作用(如 DOM 操作、生命周期调用、useEffect 回调)。commit 阶段分为 before mutation、mutation、layout 等子阶段,依次执行 DOM 更新、调用生命周期方法等。
  5. 【回答框架 5】对于函数组件,React 还会处理 Hooks 的变化,如 useState 的 state 更新、useEffect 的依赖追踪等,确保 UI 与状态同步。最后,浏览器渲染,React 完成整个更新循环。
  6. 【关键点 1】更新触发:setState 或 useState 等会触发更新。
  7. 【关键点 2】调度与渲染:React 采用调度器决定更新时机,渲染阶段生成新的虚拟 DOM 树。
  8. 【关键点 3】协调与 diff:通过 diff 算法比较新旧虚拟 DOM,找出最小变更。
  9. 【关键点 4】commit 阶段:执行 DOM 操作和生命周期副作用。
  10. 【易错点 1】误以为 DOM 结构变化直接操作真实 DOM,实际上 React 先操作虚拟 DOM 再批量更新真实 DOM。
  11. 【易错点 2】忽略 key 的作用,可能阻碍复用和导致不必要的重渲染。