React【回顾】 深层次面试详解:函数式组件核心原理与高级优化

发布于:2025-06-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

以下是对 React 深层次内容的全面解析,涵盖函数式组件的核心原理、性能优化、设计模式和最新特性:

🔧 一、React 核心机制剖析

在这里插入图片描述

1. Fiber 架构深解

  • Fiber 节点结构:
function FiberNode(tag, pendingProps, key) {
   
  this.tag = tag;              // 组件类型(函数组件=0, 类组件=1)
  this.key = key;              // 唯一标识
  this.elementType = null;     // ReactElement 的 type
  this.stateNode = null;        // 对应 DOM 节点
  this.return = null;          // 父 Fiber
  this.child = null;           // 第一个子 Fiber
  this.sibling = null;         // 兄弟 Fiber
  this.memoizedState = null;   // Hook 链表头
  // ... 其他字段
}
  • 渲染流程:
    1. 调度阶段(Render Phase):可中断的任务处理,计算变更
    2. 提交阶段(Commit Phase):不可中断的 DOM 应用变更

2. 调和算法(Reconciliation)

  • 双缓冲机制:
    • current 树:当前已渲染的 Fiber 树
    • workInProgress 树:正在构建的新树
  • Diffing 优化策略:
    • 同级比较:只比较相同层级的节点
    • Key 优化:列表比较通过 key 识别移动/增删
    • 类型判断:元素类型不同则直接销毁重建

3. 事件系统原理

在这里插入图片描述

  • 合成事件(SyntheticEvent):
function handleClick(e) {
   
  console.log(e.nativeEvent);  // 原始事件
  console.log(e.isPropagationStopped()); // React 封装方法
}
  • 事件池机制:事件对象重用提升性能(React 17+ 已移除)

⚛️ 二、Hooks 机制深度解析

1. Hooks 实现原理

  • Hook 数据结构:
type Hook = {
   
  memoizedState: any,        // 当前状态值
  baseState: any,             // 基础状态
  baseQueue: Update<any> | null, // 待处理更新
  queue: UpdateQueue<any> | null, // 更新队列
  next: Hook | null,          // 下一个 Hook
};
  • Hooks 调用链:
    在这里插入图片描述

2. useState/useReducer 核心

  • 批量更新机制:
const [count, setCount] = useState(0);

// React 18 默认批处理
const increment = () => {
   
  setCount(c => c + 1);
  setCount(c => c + 1); // 只触发一次渲染
};

// 非批处理(React 17 及以下)
setTimeout(() => {
   
  setCount(<