Vue 是怎么"知道"数据变了,然后更新页面的?
Vue 2 遍历 data 对象的每个属性,用 Object.defineProperty 转换成 getter/setter:
Vue.set / Vue.deletearr[0] = 1 监听不到Vue 3 用 ES6 Proxy 拦截整个对象操作:
Proxy 只能代理对象,不能代理基本类型。
| Vue 2 | Vue 3 | |
|---|---|---|
| 原理 | Object.defineProperty | Proxy |
| 数组下标 | 监听不到 | 支持 |
| 新增属性 | 需用 Vue.set | 自动支持 |
| 性能 | 递归遍历慢 | 惰性代理快 |