面试官:React 的并发渲染你了解吗?我:Fiber 架构升级带来的超能力,给您整明白!

99 阅读3分钟

👨‍🏫 本系列由前端面试真题博主 Kincy 发起,每日更新一题,通勤路上轻松掌握高频知识点。
📢 想进大厂?你得先过我这关!今天的考官又上线啦!

🎯【灵魂发问区】——面试官的冷脸挑战

面试官(挑眉一笑):听说你很熟 React?那说说看什么是 Concurrent Rendering?

提示:此刻请深呼吸,别慌,先别聊 reconciliation,别上来就是 scheduler,咱们得讲人话!

⚡【机智反杀区】——我的高情商反应

我:React 的 Concurrent Rendering 是 React 18 引入的一个调度模型升级,它允许 React 打断当前的渲染工作,把紧急任务(比如用户输入)优先处理,然后再继续处理剩下的渲染逻辑。
简单说:React 以前是“干完一件事再做下一件”,现在学会了“优先做重要的事,其他缓一缓”。

比如用户在搜索框疯狂打字,React 不会等一堆复杂的 DOM 更新完成后才响应用户输入,而是能暂停、打断、恢复渲染,让用户操作更丝滑!

🧠【原理解构区】——背后到底发生了什么?

过去 React 是同步渲染模型(Legacy Rendering):一旦开始渲染某个组件树,一口气干到底,过程无法中断。这种做法在复杂 UI 或长列表渲染中会卡住主线程,页面假死。

🚀 Concurrent 模式带来三大关键升级:

  1. 可中断渲染(Interruptible Rendering) :React 渲染中可以“打断”,之后再继续。
  2. 优先级调度(Scheduling) :任务有优先级(比如 useTransition 会标记为低优先级)。
  3. 时间切片(Time Slicing) :React 每帧保留 5ms 处理 JS,超过就交还控制权给浏览器。

🔧 启用方式也很简单:

import { createRoot } from 'react-dom/client';

const root = createRoot(document.getElementById('app'));
root.render(<App />);

只要不是 ReactDOM.render,你就已经进入了 concurrent 模式的大门。

🔍【源码窥视区】——Fiber 架构是怎么撑起这一切的?

Fiber 是 React 16 推出的新架构,用来实现可中断更新和任务调度的关键。

👁‍🗨 本质上,React 把渲染任务拆成了“Fiber 单元”,每个节点变成一个可执行任务单元,有状态、有父子兄弟指针。

function performUnitOfWork(fiber) {
  const child = beginWork(fiber);
  if (child) return child;
  
  while (fiber) {
    completeWork(fiber);
    if (fiber.sibling) return fiber.sibling;
    fiber = fiber.return;
  }
}

这个 performUnitOfWork 就像一个工作循环工人,一次做一点,随时可以中断、恢复!

调度由 react-reconciler 配合 scheduler 实现,每个更新任务有 expirationTime,对应不同优先级。

比如输入框绑定的 onChange 是高优先级,useDeferredValue 这种慢慢来的就是低优先级。

🎓【面霸金句区】——最佳面试回答模版

“React 的并发渲染是一种新的调度模式,基于 Fiber 架构和时间切片机制。它允许 React 根据任务优先级中断并恢复渲染流程,让 UI 响应更流畅。启用 concurrent 只需使用 createRoot。React 会在保证一致性的前提下优化用户体验,比如通过 useTransition 降低不紧急任务的优先级。Fiber 架构支持这种更新拆分的能力,是并发渲染的技术基石。”

💡 拿这个回答,配合几个例子,直接通关面试 80 分!

🔮【明日预告区】——明天我们聊点什么?

面试官:说完 Concurrent,那你了解 startTransition 和 useDeferredValue 吗?我:异步更新神器,慢操作请排队!

明天我们继续揭秘: “React 中如何用 Transition 控制 UI 不卡顿?”
不仅讲原理,还带你写几个实战场景,一招教你让表格分页、搜索都丝滑!

📌 结尾彩蛋

👨‍💻 你以为 React 的并发渲染只是“不卡顿”这么简单?等你看到 “Selective Hydration”、“React Server Components” 再来哭!

如果你觉得这篇文章有料,欢迎点个 ❤️ 或转发给一起面试的小伙伴!想学下一篇?评论区见!

📚 本系列每天一题,持续更新中!
👉 扫码加入【前端面试题交流群】,一起成长、交流、内推、分享机会!

微信二维码.png 备注“掘金”优先通过