返回

Vue3 响应式系统实现原理学习总结(四):watch 实现剖析

前端

Vue3 响应式系统实现原理学习总结(四)

响应式系统是 Vue3 中的核心特性之一,它允许 Vue3 追踪和更新应用程序中的数据变化。在之前的文章中,我们已经总结了响应式系统基础实现、细节问题和 computed 相关的实现。本文将重点总结 watch 相关的实现。

watch 基本实现

watch 的基本实现相对简单,主要包括以下步骤:

  1. 创建一个 Watcher 实例。
  2. 将 Watcher 实例添加到一个 Watcher 列表中。
  3. 在 Watcher 实例中定义一个回调函数,当被监视的数据发生变化时调用该函数。
class Watcher {
  constructor(vm, expOrFn, cb) {
    this.vm = vm;
    this.expOrFn = expOrFn;
    this.cb = cb;
    this.value = this.get();
  }

  get() {
    Dep.target = this;
    const value = this.expOrFn.call(this.vm);
    Dep.target = null;
    return value;
  }

  update() {
    const value = this.get();
    if (value !== this.value) {
      this.cb.call(this.vm, value, this.value);
      this.value = value;
    }
  }
}

getter 和 immediate

watch 可以配置 getter 函数,getter 函数会立即被调用,并且在数据发生变化时再次被调用。immediate 选项指定是否在 Watcher 创建时立即调用回调函数。

watch: {
  name: {
    handler(newValue, oldValue) {
      // do something
    },
    immediate: true // 立即调用
  }
}

总结

watch 是 Vue3 响应式系统中一种强大的工具,它允许我们对数据变化进行响应。watch 的实现涉及创建 Watcher 实例、定义回调函数和 getter 函数,以及处理 immediate 选项。通过理解 watch 的实现原理,我们可以更好地利用 Vue3 的响应式系统来构建高效、响应良好的应用程序。

SEO