JS 事件循环(宏/微任务) ↔ Vue ↔ React** 三者的关系

一、核心结论(先记死)

Vue 和 React 的异步更新底层,完全一样!

都是基于 JS 原生的 微任务(Microtask) 实现的。


二、三者关系大白话

1. JS 事件循环 = 地基

  • 同步 → 微任务 → 宏任务
  • 这是浏览器规则,所有框架都必须遵守

2. Vue = 用微任务做 DOM 更新

  • Vue 把 DOM 更新nextTick 都放进 微任务
  • 执行顺序:
    同步代码 → 微任务(Vue更新DOM + nextTick) → 宏任务

3. React = 也用微任务做批量更新

  • React 18 之后的 自动批处理、Concurrent Mode
  • 底层也是 微任务 驱动
  • 执行顺序和 Vue 一模一样

三、最关键:Vue 和 React 在事件循环里的行为对比

完全一样的规则:

  1. 同步代码先执行
  2. 框架批量更新 DOM(微任务)
  3. 微任务清空
  4. 浏览器渲染(Layout / Paint)
  5. 最后执行宏任务(setTimeout)

代码对比(效果完全相同)

Vue3
js 复制代码
const count = ref(0)

const change = () => {
  count.value = 1
  console.log('同步:DOM还没变')  // 先走

  nextTick(() => {
    console.log('微任务:DOM更新了') // 再走
  })

  setTimeout(() => {
    console.log('宏任务:最后走') // 最后
  }, 0)
}
React 18+
js 复制代码
const [count, setCount] = useState(0)

const change = () => {
  setCount(1)
  console.log('同步:DOM还没变') // 先走

  // React 没有 nextTick,但用 Promise 就等价
  Promise.resolve().then(() => {
    console.log('微任务:DOM更新了') // 再走
  })

  setTimeout(() => {
    console.log('宏任务:最后走') // 最后
  }, 0)
}

输出顺序完全一样!

复制代码
同步:DOM还没变
微任务:DOM更新了
宏任务:最后走

四、为什么 React 没有像 Vue 一样讲事件循环?

因为:

  • Vue 暴露了 nextTick
  • React 隐藏了底层,自动批处理

底层原理 100% 相同

  • 都是异步更新 DOM
  • 都放在微任务
  • 都遵守 同步 → 微任务 →浏览器渲染→ 宏任务

五、一张图彻底打通所有关系

复制代码
JS 事件循环(地基)
  ↓
同步代码
  ↓
微任务(Vue DOM更新 / React批量更新)
  ↓
宏任务(setTimeout、ajax、UI渲染)

六、终极总结(面试必背)

  1. Vue 和 React 异步更新原理完全一样,都基于 JS 微任务
  2. 执行顺序永远是:同步 → 微任务(框架更新) → 宏任务
  3. Vue nextTick = React Promise.resolve().then()
  4. setTimeout 永远最后执行

相关推荐
假如让我当三天老蒯1 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
_柳青杨1 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
spmcor1 小时前
React 进阶指南:状态管理进化——从 Context 到 Redux Toolkit(第五篇)
react.js
spmcor1 小时前
React 进阶指南:React Router v6 完全实战(第四篇)
react.js
JieE21212 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
冬奇Lab14 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
一颗烂土豆20 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
YFF菲菲兔20 小时前
调度系统和调和系统的桥梁
react.js
kyriewen1 天前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
weedsfly1 天前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript