当前位置:首页 > VUE

vue如何实现mvvm

2026-03-28 04:57:38VUE

Vue 实现 MVVM 的核心机制

Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下机制完成:

数据劫持(响应式核心)

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)对数据对象进行劫持。当数据变化时,能自动触发视图更新。

// Vue 2 的响应式实现片段
function defineReactive(obj, key) {
  let value = obj[key]
  Object.defineProperty(obj, key, {
    get() {
      return value
    },
    set(newVal) {
      if (newVal !== value) {
        value = newVal
        dep.notify() // 通知依赖更新
      }
    }
  })
}

依赖收集(发布-订阅模式)

每个响应式属性拥有一个 Dep 实例,用于存储所有依赖(Watcher)。当数据变化时,Dep 会通知所有 Watcher 更新。

vue如何实现mvvm

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

虚拟 DOM 与差异更新

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

// 简化的 patch 过程
function patch(oldVnode, vnode) {
  if (sameVnode(oldVnode, vnode)) {
    patchVnode(oldVnode, vnode)
  } else {
    const parent = oldVnode.parentNode
    parent.insertBefore(createElm(vnode), oldVnode)
    parent.removeChild(oldVnode)
  }
}

模板编译

Vue 模板通过编译器转换为渲染函数,建立数据与视图的绑定关系。

vue如何实现mvvm

// 编译结果示例
function render() {
  with(this) {
    return _c('div', { attrs: { "id": "app" } }, [_v(_s(message))])
  }
}

实现流程分解

  1. 初始化阶段

    • 对 data 进行响应式处理
    • 编译模板生成渲染函数
    • 创建 Watcher 绑定更新函数
  2. 依赖收集阶段

    • 执行渲染函数触发 getter
    • 通过 Dep 收集当前 Watcher 作为依赖
  3. 更新阶段

    • 数据变化触发 setter
    • Dep 通知所有 Watcher 执行更新
    • 重新计算虚拟 DOM 并应用差异

关键设计模式

  • 观察者模式:通过 Watcher 观察数据变化
  • 中介者模式:Dep 作为中间件协调数据与视图
  • 命令模式:将 DOM 操作封装为指令系统

这种设计使得开发者只需关注数据状态,视图的同步更新由框架自动完成,实现了 MVVM 的核心目标。

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

相关文章

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

甘特图vue实现

甘特图vue实现

甘特图 Vue 实现方法 使用开源库 vue-ganttastic 安装依赖: npm install vue-ganttastic 基础实现代码: <template> <…

vue实现选择

vue实现选择

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

vue实现链接

vue实现链接

Vue 实现链接的方法 在 Vue 中实现链接可以通过多种方式,包括使用 <router-link>、<a> 标签或编程式导航。以下是几种常见的方法: 使用 <rout…