当前位置:首页 > VUE

vue双向实现原理

2026-01-19 00:57:25VUE

Vue 双向数据绑定的实现原理

Vue 的双向数据绑定主要通过数据劫持结合发布-订阅模式实现,核心是 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)。

数据劫持

Vue 2.x 使用 Object.defineProperty 劫持对象的属性访问和修改。通过定义属性的 gettersetter,在数据变化时触发更新。

vue双向实现原理

let data = { name: 'Vue' };
Object.defineProperty(data, 'name', {
  get() {
    console.log('获取数据');
    return val;
  },
  set(newVal) {
    console.log('设置数据');
    val = newVal;
    // 触发更新
  }
});

Vue 3.x 改用 Proxy,可以直接监听整个对象而非属性,解决了 Vue 2.x 中无法监听新增属性的问题。

let data = { name: 'Vue' };
let proxy = new Proxy(data, {
  get(target, key) {
    console.log('获取数据');
    return target[key];
  },
  set(target, key, value) {
    console.log('设置数据');
    target[key] = value;
    // 触发更新
    return true;
  }
});

依赖收集与发布-订阅

每个响应式数据会维护一个依赖列表(Dep),用于存储所有依赖该数据的 Watcher 实例。当数据变化时,Dep 会通知所有 Watcher 更新视图。

vue双向实现原理

class Dep {
  constructor() {
    this.subs = [];
  }
  addSub(sub) {
    this.subs.push(sub);
  }
  notify() {
    this.subs.forEach(sub => sub.update());
  }
}

class Watcher {
  update() {
    // 更新视图
  }
}

模板编译

Vue 的模板编译器将模板转换为渲染函数。在编译过程中,解析指令(如 v-model)并生成对应的数据绑定代码。

对于 v-model,它本质上是语法糖,结合了 :value 绑定和 @input 事件监听。

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

整体流程

  1. 初始化时,通过数据劫持监听数据变化。
  2. 编译模板时,为每个绑定创建 Watcher 并添加到对应数据的 Dep 中。
  3. 数据变化时,触发 setter,Dep 通知所有 Watcher 更新视图。
  4. 用户输入触发事件,更新数据,形成双向绑定循环。

Vue 3.x 的改进在于使用 Proxy 提高了响应式系统的性能和灵活性,同时引入了 Composition API 增强代码组织能力。

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

相关文章

vue实现原理

vue实现原理

Vue 实现原理 Vue.js 的核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现细节的分解: 响应式系统 Vue 2.x 使用 Object.defineProp…

vue实现双向绑定

vue实现双向绑定

Vue 双向绑定的实现原理 Vue 的双向绑定是通过 v-model 指令实现的,其本质是语法糖,结合了 v-bind(属性绑定)和 v-on(事件监听)。以下是具体实现方式: 使用 v-model…

js放大镜的实现原理

js放大镜的实现原理

放大镜效果的基本原理 放大镜效果的核心是通过鼠标移动事件获取当前光标位置,动态计算放大区域的显示范围和比例。通常需要两个元素:原图容器和放大镜显示的容器。当鼠标在原图上移动时,放大镜容器显示对应位置的…

vue动画实现原理

vue动画实现原理

Vue动画实现原理 Vue的动画系统基于CSS过渡和动画,结合Vue的响应式系统,提供声明式的方式管理元素进入/离开的动画效果。核心原理分为以下几个部分: 过渡类名自动应用 Vue在元素插入…

vue rooter 实现原理

vue rooter 实现原理

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

vue双向实现数据

vue双向实现数据

Vue 双向数据绑定的实现 Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了 v-bind 和 v-on 的功能,能够同步表单输入和应用状态。 基本语法 在表单元素上使用 v-mo…