当前位置:首页 > VUE

vue mvvm的实现

2026-03-09 14:40:10VUE

Vue MVVM 的实现原理

Vue 的 MVVM(Model-View-ViewModel)实现主要依赖于数据绑定和响应式系统。以下是 Vue 实现 MVVM 的核心机制:

数据劫持(响应式系统)

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据的读写操作。当数据被修改时,触发视图更新。

// Vue 2 的响应式实现(简化版)
function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      return val;
    },
    set(newVal) {
      if (newVal === val) return;
      val = newVal;
      // 触发视图更新
      dep.notify();
    }
  });
}

依赖收集

每个响应式属性关联一个 Dep(依赖管理器),在属性被访问时收集依赖(Watcher),在属性变化时通知依赖更新。

vue mvvm的实现

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

虚拟 DOM 和 Diff 算法

Vue 通过虚拟 DOM 优化渲染性能。当数据变化时,生成新的虚拟 DOM,通过 Diff 算法对比新旧虚拟 DOM,计算出最小更新操作。

// 简化的虚拟 DOM 结构
{
  tag: 'div',
  attrs: { id: 'app' },
  children: [
    { tag: 'span', children: 'Hello' }
  ]
}

模板编译

Vue 将模板编译为渲染函数。模板中的指令(如 v-model)会被解析为对应的数据绑定和事件处理逻辑。

vue mvvm的实现

// 模板
<input v-model="message">

// 编译后的渲染函数(简化)
function render() {
  return _c('input', {
    domProps: { value: this.message },
    on: { input: e => { this.message = e.target.value } }
  });
}

双向绑定(v-model)

v-model 是语法糖,自动处理 value 属性和 input 事件,实现表单元素与数据的双向绑定。

// v-model 的实现原理
<input :value="message" @input="message = $event.target.value">

Vue 3 的改进

Vue 3 使用 Proxy 替代 Object.defineProperty,解决了 Vue 2 中无法检测数组和对象新增属性的问题,并提高了性能。

// Vue 3 的响应式实现(简化版)
function reactive(obj) {
  return new Proxy(obj, {
    get(target, key) {
      track(target, key);
      return target[key];
    },
    set(target, key, value) {
      target[key] = value;
      trigger(target, key);
    }
  });
}

Vue 的 MVVM 实现通过响应式系统、虚拟 DOM 和模板编译等技术,实现了数据与视图的自动同步,开发者只需关注数据逻辑,无需手动操作 DOM。

标签: vuemvvm
分享给朋友:

相关文章

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…

vue实现左右菜单

vue实现左右菜单

实现左右菜单的基本思路 使用Vue实现左右菜单通常需要两个主要组件:左侧的导航菜单和右侧的内容区域。左侧菜单用于导航,右侧区域根据菜单选择动态展示内容。 创建左侧菜单组件 左侧菜单通常是一个列表,可…