React【回顾】 深层次面试详解:函数式组件核心原理与高级优化
以下是对 React 深层次内容的全面解析,涵盖函数式组件的核心原理、性能优化、设计模式和最新特性:
🔧 一、React 核心机制剖析
1. Fiber 架构深解
- Fiber 节点结构:
function FiberNode(tag, pendingProps, key) {this.tag = tag; // 组件类型(函数组件=0, 类组件=1)this.key = key; // 唯一标识this.elementType = null; // ReactElement 的 typethis.stateNode = null; // 对应 DOM 节点this.return = null; // 父 Fiberthis.child = null; // 第一个子 Fiberthis.sibling = null; // 兄弟 Fiberthis.memoizedState = null; // Hook 链表头// ... 其他字段
}
- 渲染流程:
- 调度阶段(Render Phase):可中断的任务处理,计算变更
- 提交阶段(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(<