当前位置:首页 > 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,在数据变化时触发更新。

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 更新视图。

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 事件监听。

vue双向实现原理

<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 rooter 实现原理

vue rooter 实现原理

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

vue extend实现原理

vue extend实现原理

Vue.extend 的实现原理 Vue.extend 是 Vue.js 中用于创建子类构造函数的全局方法,其核心原理基于 JavaScript 的原型继承机制。以下是其关键实现逻辑: 原型继承与构…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

vue 路由实现原理

vue 路由实现原理

Vue 路由实现原理 Vue Router 是 Vue.js 官方的路由管理器,其核心原理基于前端路由的实现方式。以下是 Vue Router 的主要实现机制: 路由模式 Vue Router 支持…

vue技术实现原理

vue技术实现原理

Vue 技术实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。 响应式系统 Vue 的响应式系统基于 Objec…

vue权限实现原理

vue权限实现原理

Vue权限实现原理 Vue权限控制的核心在于动态路由和组件级权限校验,通常结合后端返回的权限数据实现。以下是常见的实现方式: 路由级权限控制 路由级权限通过动态生成可访问路由表实现。用户登录后获取权…