当前位置:首页 > VUE

vue 如何实现mvvm的

2026-01-23 14:41:28VUE

Vue 的 MVVM 实现原理

Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。核心实现依赖以下几个机制:

数据劫持(响应式系统)

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

// Vue 2 的响应式实现简化示例
function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      console.log('获取值');
      return val;
    },
    set(newVal) {
      if (newVal !== val) {
        console.log('设置值');
        val = newVal;
        // 触发更新
      }
    }
  });
}

依赖收集与发布订阅

通过 Dep(依赖管理器)和 Watcher(观察者)实现依赖的收集和通知。每个响应式属性有一个 Dep 实例,用于存储依赖它的 Watcher

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

虚拟 DOM 与 Diff 算法

Vue 将模板编译为虚拟 DOM(VNode),通过 Diff 算法比对变化,最小化 DOM 操作。当数据变化时,生成新的 VNode 并与旧 VNode 对比,高效更新真实 DOM。

// 虚拟 DOM 简化结构
const vnode = {
  tag: 'div',
  props: { class: 'container' },
  children: [
    { tag: 'p', text: 'Hello Vue' }
  ]
};

模板编译

Vue 的模板通过编译器转换为渲染函数。例如以下模板:

<div>{{ message }}</div>

会被编译为类似以下的渲染函数:

vue 如何实现mvvm的

function render() {
  return _c('div', [_v(_s(message))]);
}

实现流程

  1. 初始化阶段:通过 new Vue() 创建实例,初始化数据、方法、生命周期等。
  2. 模板编译:将模板转换为渲染函数(如果是运行时编译版本)。
  3. 响应式处理:对 data 中的属性进行劫持,建立 DepWatcher 的关联。
  4. 首次渲染:执行渲染函数生成 VNode,并挂载为真实 DOM。
  5. 更新阶段:数据变化时触发 setter,通知 Watcher 重新渲染,通过 Diff 算法更新 DOM。

通过以上机制,Vue 实现了数据驱动视图的 MVVM 模式,开发者只需关注数据逻辑,无需手动操作 DOM。

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

相关文章

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

实现vue cli

实现vue cli

安装 Vue CLI 确保系统中已安装 Node.js(版本建议 12.x 或更高)。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 安装完成后验证版本:…

vue实现刷卡

vue实现刷卡

Vue 实现刷卡效果 在 Vue 中实现刷卡效果可以通过 CSS 动画和 Vue 的过渡系统结合完成。以下是一种常见的实现方式: 基础实现方法 安装 Vue 过渡依赖(如果尚未安装): npm i…