Skip to content

说一下 vm.$set 原理

Posted on:2024年8月10日 at 19:09

vm.$set 是 Vue 中用于在对象上设置属性并确保新属性是响应式的方法。其实现原理可以简化为以下几个步骤:

  1. 处理数组情况: 如果目标是数组,并且键是有效的数组索引,使用 splice 方法添加新元素以保持响应性。

  2. 处理已有属性: 如果属性已经存在于对象中,直接赋值。

  3. 处理新属性: 如果目标对象不是响应式对象,直接赋值新属性。

  4. 添加响应式新属性: 如果目标对象是响应式的,通过 defineReactive 方法将新属性定义为响应式。这包括定义 getter 和 setter。

  5. 通知依赖更新: 调用 ob.dep.notify() 通知所有依赖于该对象的 watchers 执行更新。

defineReactive 简要实现

defineReactive 方法定义对象属性为响应式,主要步骤:

总结

vm.$set 使得在运行时动态添加的新属性能够响应数据变化,从而保持 Vue 的响应式特性。

原文转自:https://fe.ecool.fun/topic/3622c49b-aa21-46f9-8818-b03eb41b0745