响应式系统
约 420 字大约 1 分钟
2025-12-01
Vue3 中响应式系统的原理?
Vue 3 的响应式系统是其核心架构的重大革新,它采用现代 JavaScript 的 Proxy API 替代了 Vue 2 的 Object.defineProperty,实现了更高效、更全面的数据响应能力。
当使用 reactive() 包装一个对象时,Vue 3 会为其创建一个 Proxy 代理。这个代理能够拦截对象的所有操作——包括属性的读取(get)、设置(set)、添加、删除等。每当您访问响应式对象的属性时,系统会通过 track() 函数自动收集依赖(即哪些组件或计算属性依赖于此数据);而当您修改数据时,则会通过 trigger() 函数精确触发所有相关依赖的更新。
对于原始值(如字符串、数字),Vue 3 提供了 ref() API,它将值包装在一个具有 .value 属性的对象中,内部同样利用响应式系统进行依赖追踪。而 computed() 则基于此系统构建,它会自动缓存计算结果,仅在依赖发生变化时才重新计算。
整个系统围绕 effect 副作用函数 运作,组件的渲染、计算属性的求值、侦听器的回调都被包装成 effect。当响应式数据变化时,Vue 3 不会立即执行更新,而是通过调度器(scheduler) 将这些更新排队,在下一个微任务中批量执行,这大大提升了性能并避免了不必要的重复渲染。
了解更多响应式系统信息,请参阅 Vue-设计与实现-响应式系统。