Skip to content

Vue 响应式原理

Vue 3 使用 Proxy 实现响应式系统,替代了 Vue 2 中的 Object.defineProperty

核心概念

reactive()

reactive() 函数接收一个对象,返回一个 Proxy 代理:

js
import { reactive } from 'vue'

const state = reactive({ count: 0 })

ref()

ref() 用于包装基本类型值:

js
import { ref } from 'vue'

const count = ref(0)
count.value++ // 通过 .value 访问

依赖追踪

Vue 3 的响应式系统基于「副作用函数」和「依赖收集」:

  1. 当读取响应式属性时,收集当前副作用
  2. 当属性变化时,通知所有依赖的副作用重新执行

与 Vue 2 的区别

特性Vue 2Vue 3
实现方式Object.definePropertyProxy
数组监听需要特殊处理原生支持
新增属性不支持原生支持
性能递归遍历懒代理