当前位置:首页 > VUE

vue 如何实现mvvm的

2026-02-24 05:18:27VUE

Vue 的 MVVM 实现原理

Vue 通过数据绑定、响应式系统和虚拟 DOM 等技术实现 MVVM(Model-View-ViewModel)模式。以下是核心实现机制:

数据劫持与响应式系统

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据对象的属性访问和修改。当数据变化时,触发依赖更新。

Vue 2 示例:

Object.defineProperty(obj, key, {
  get() { return value; },
  set(newVal) {
    if (newVal !== value) {
      value = newVal;
      dep.notify(); // 通知依赖更新
    }
  }
});

Vue 3 的 Proxy:

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

依赖收集与发布订阅

每个响应式属性关联一个 Dep(依赖收集器),Watcher(观察者)在渲染过程中订阅依赖。数据变化时,Dep 通知所有 Watcher 更新视图。

依赖收集流程:

  1. 组件渲染时触发 getter,将当前 Watcher 添加到 Dep 中。
  2. 数据修改时触发 setterDep 通知所有 Watcher 执行更新。

虚拟 DOM 与 Diff 算法

Vue 将模板编译为虚拟 DOM(VNode),通过 Diff 算法比对变化,最小化真实 DOM 操作。

Patch 过程:

function patch(oldVnode, newVnode) {
  if (sameVnode(oldVnode, newVnode)) {
    patchVnode(oldVnode, newVnode); // 精细化比对子节点
  } else {
    replaceNode(oldVnode, newVnode); // 直接替换
  }
}

模板编译

Vue 将模板编译为渲染函数,生成虚拟 DOM:

  1. 解析:将模板转换为 AST(抽象语法树)。
  2. 优化:标记静态节点,跳过 Diff。
  3. 生成代码:将 AST 转换为可执行的渲染函数。

示例输出:

with(this) {
  return _c('div', { attrs: { id: 'app' } }, [_v("Hello " + _s(name))]);
}

双向数据绑定

通过 v-model 指令实现表单元素与数据的双向绑定,本质是语法糖:

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

总结

Vue 的 MVVM 实现核心:

vue 如何实现mvvm的

  • Model:普通 JavaScript 对象,通过响应式系统监听变化。
  • View:模板或渲染函数生成的虚拟 DOM。
  • ViewModel:Vue 实例,负责数据与视图的同步,通过响应式机制、虚拟 DOM 和模板编译实现解耦。

标签: 如何实现vue
分享给朋友:

相关文章

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直接使…

vue实现公式

vue实现公式

在Vue中实现公式展示或计算可以通过多种方式实现,以下为具体方法: 使用模板插值与计算属性 若公式较简单,可直接在模板中使用插值表达式或计算属性。例如计算圆的面积: <templat…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue的实现

vue的实现

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

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…