React 进阶面试题, React 的执行流程是怎样的?可以从源码的角度深入说明
React 进阶面试题, React 的执行流程是怎样的?可以从源码的角度深入说明
QA
Step 1
Q:: React 的执行流程是怎样的?可以从源码的角度深入说明。
A:: React 的执行流程从本质上来说涉及到两个主要阶段:渲染阶段和提交阶段。渲染阶段是指 React 将 JSX 转换成虚拟 DOM 树,并且计算出需要更新的部分。React 使用一个叫做 Fiber 的架构来跟踪每一个组件的状态和更新。在渲染阶段,React 会递归地遍历组件树,构建 Fiber 树,并生成更新的队列。提交阶段则是将计算好的更新应用到实际的 DOM 上。在此阶段,React 会通过 DOM 操作将更新应用到页面上,并触发必要的生命周期方法。
Step 2
Q:: React 中 Fiber 是什么?它在 React 中的作用是什么?
A:: Fiber 是 React 16
引入的新的协调引擎,它是对 React 核心算法的重新实现,旨在提高 React 的可调度性和性能。Fiber 结构允许 React 在执行大任务时,可以被中断,并在之后恢复,这使得 React 可以更好地处理用户交互和动画等场景。每个 Fiber 节点都对应于一个 React 元素,并保存了该元素的状态、更新队列以及与父子节点的关系等信息。
Step 3
Q:: React 中的 Reconciliation 过程是什么?
A:: Reconciliation 是 React 用来确定 UI 中哪些部分需要更新的过程。当组件的状态或属性发生变化时,React 会创建一棵新的虚拟 DOM 树,并将其与之前的虚拟 DOM 树进行比较。通过比较,React 能够知道哪些元素发生了变化,并生成一个最小化的更新队列。这个过程的核心是 Diff 算法,React 通过标识出元素的类型和 key 值来高效地比较新旧虚拟 DOM 树,从而优化更新过程。
Step 4
Q:: React 的生命周期方法有哪些?每个方法的作用是什么?
A:: React 组件有一系列生命周期方法,可以划分为三个主要阶段:装载、更新和卸载。装载阶段包括 componentDidMount
,它在组件被插入 DOM 后立即调用,通常用于初始化请求或订阅。更新阶段包括 componentDidUpdate
,它在组件更新完成后调用,可以用于响应 prop 或 state 的变化。卸载阶段则包括 componentWillUnmount
,用于在组件从 DOM 中移除前执行清理操作,如取消订阅或清理计时器。
Step 5
Q:: React 中的 Hooks 是什么?为什么它们很重要?
A:: Hooks 是 React 16.8
引入的新特性,允许在不编写类的情况下使用 state 以及其他 React 特性。最常用的 Hook 是 useState
和 useEffect
。useState
允许在函数组件中添加状态,而 useEffect
则使你可以执行副作用(如数据获取、订阅等)。Hooks 重要的原因在于它们使得函数组件具备了类组件的大部分功能,并且提供了一种更加简洁和灵活的组件编写方式。