当前位置:首页 > VUE

vue 双向实现原理

2026-02-18 13:35:30VUE

Vue 双向绑定的实现原理

Vue 的双向绑定主要通过数据劫持结合发布-订阅模式实现,核心是 v-model 指令和响应式系统。

数据劫持与响应式

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据对象的属性,在属性被访问或修改时触发 getter/setter。例如:

vue 双向实现原理

// Vue 2 的简化实现
function defineReactive(obj, key) {
  let value = obj[key];
  Object.defineProperty(obj, key, {
    get() {
      console.log('读取数据');
      return value;
    },
    set(newVal) {
      if (newVal !== value) {
        console.log('更新数据');
        value = newVal;
        // 通知依赖更新
      }
    }
  });
}

依赖收集与发布订阅

每个响应式属性关联一个 Dep(依赖管理器),用于收集依赖该属性的 Watcher(订阅者)。当数据变化时,Dep 通知所有 Watcher 更新视图。

class Dep {
  constructor() {
    this.subscribers = [];
  }
  depend() {
    if (target && !this.subscribers.includes(target)) {
      this.subscribers.push(target);
    }
  }
  notify() {
    this.subscribers.forEach(sub => sub());
  }
}

v-model 的实现

v-model 是语法糖,本质上是 value 属性绑定和 input 事件监听的组合。例如:

vue 双向实现原理

<input v-model="message">
<!-- 等价于 -->
<input :value="message" @input="message = $event.target.value">

虚拟 DOM 与更新优化

数据变化后触发重新渲染,Vue 通过虚拟 DOM 的 diff 算法高效更新真实 DOM,减少性能开销。

双向绑定的关键点

  • 数据驱动视图:数据变化自动更新 DOM。
  • 视图影响数据:通过事件监听(如 input)修改数据。
  • 异步更新队列:Vue 将多次数据变更合并为一次视图更新,提高性能。

Vue 3 的改进

Vue 3 使用 Proxy 替代 Object.defineProperty,解决了无法监听新增属性和数组变化的问题,并提高了性能。例如:

const proxy = new Proxy(obj, {
  get(target, key) {
    track(target, key); // 依赖收集
    return target[key];
  },
  set(target, key, value) {
    target[key] = value;
    trigger(target, key); // 触发更新
  }
});

标签: 双向原理
分享给朋友:

相关文章

vue rooter 实现原理

vue rooter 实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 的官方路由管理器,其核心实现依赖于 Vue 的响应式系统和插件机制。以下是其核心原理的解析: 路由模式 Vue Router…

vue实现原理比较

vue实现原理比较

Vue 2 实现原理 Vue 2 的核心实现基于响应式系统和虚拟 DOM。响应式系统通过 Object.defineProperty 对数据进行劫持,当数据变化时触发依赖更新。虚拟 DOM 则通过 d…

vue 双向实现原理

vue 双向实现原理

Vue 双向绑定的实现原理 Vue 的双向绑定主要通过 v-model 指令实现,其核心是结合数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。以下是具体实现机制…

vue 组件实现原理

vue 组件实现原理

Vue 组件实现原理 Vue 组件的实现原理主要基于以下几个核心机制: 组件注册与定义 Vue 组件可以通过 Vue.component 全局注册或局部注册。组件定义通常包含模板(template)…

vue 底层实现原理

vue 底层实现原理

Vue 底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 底层实现的关键技术点: 响应式系统 V…

vue实现mvvm原理

vue实现mvvm原理

Vue 实现 MVVM 的原理 Vue 的 MVVM(Model-View-ViewModel)实现主要依赖于数据绑定和响应式系统。以下是其核心原理的详细解析: 数据劫持(响应式系统) Vue 通过…