问答题398/1593说一下 vm.$set 原理

难度:
2024-06-06 创建

参考答案:

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

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

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

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

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

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

defineReactive 简要实现

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

  • 依赖管理: 创建一个 Dep 实例管理依赖。
  • 递归观察: 使用 observe 递归地将属性值转化为响应式。
  • 定义 getter 和 setter: 使用 Object.defineProperty 定义属性的 getter 和 setter。在 getter 中收集依赖,在 setter 中通知依赖更新。

总结

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

最近更新时间:2024-08-10

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!