当前位置:首页 > VUE

vue watch实现过程

2026-01-17 00:14:55VUE

Vue Watch 的实现过程

Vue 的 watch 用于监听响应式数据的变化,并在数据变化时执行回调函数。以下是其核心实现过程:

初始化 Watcher

在 Vue 实例初始化阶段,如果组件选项中定义了 watch,会遍历这些监听属性,为每个属性创建一个 Watcher 实例。Watcher 是 Vue 响应式系统的核心之一,负责依赖收集和触发更新。

// 简化版 Watcher 初始化逻辑
function initWatch(vm, watch) {
  for (const key in watch) {
    const handler = watch[key];
    createWatcher(vm, key, handler);
  }
}

依赖收集

Watcher 被创建时,会执行一次 getter 函数(即监听属性的值),触发数据的 get 拦截器。此时,Watcher 会被添加到当前属性的依赖列表(Dep)中。

// 依赖收集核心逻辑
class Dep {
  constructor() {
    this.subs = [];
  }
  depend() {
    if (Dep.target) {
      this.subs.push(Dep.target);
    }
  }
  notify() {
    this.subs.forEach(watcher => watcher.update());
  }
}

触发更新

当监听的属性值发生变化时,会触发 set 拦截器,调用 Dep.notify() 通知所有依赖的 Watcher 执行更新。Watcher 会根据配置(如 deepimmediate)决定是否执行回调函数。

// Watcher 更新逻辑
class Watcher {
  update() {
    if (this.lazy) {
      this.dirty = true;
    } else {
      this.run();
    }
  }
  run() {
    const value = this.get();
    if (value !== this.value || this.deep) {
      this.cb.call(this.vm, value, this.value);
      this.value = value;
    }
  }
}

深度监听(deep: true)

如果设置了 deep: trueWatcher 会递归遍历监听对象的所有子属性,为每个子属性也绑定依赖收集逻辑。

// 深度监听实现片段
function traverse(val) {
  if (typeof val !== 'object') return;
  for (const key in val) {
    traverse(val[key]);
  }
}

立即触发(immediate: true)

若配置了 immediate: trueWatcher 会在创建时立即执行一次回调函数,而非等待数据变化。

// immediate 处理逻辑
if (this.immediate) {
  this.cb.call(this.vm, this.value, null);
}

总结

Vue 的 watch 通过 Watcher 机制实现,核心流程包括依赖收集、派发更新和回调执行。通过 deepimmediate 等配置项,可以扩展其监听行为。

vue watch实现过程

标签: 过程vue
分享给朋友:

相关文章

vue实现导航切换内容

vue实现导航切换内容

Vue实现导航切换内容的方法 在Vue中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Router…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return {…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…