当前位置:首页 > VUE

100行代码实现vue

2026-02-22 23:03:08VUE

实现简易Vue框架的100行代码示例

以下是一个简化版Vue响应式系统的核心实现,包含数据响应式、模板编译和依赖收集等基本功能。

class Dep {
  constructor() {
    this.subscribers = new Set()
  }
  depend() {
    if (activeEffect) this.subscribers.add(activeEffect)
  }
  notify() {
    this.subscribers.forEach(effect => effect())
  }
}

let activeEffect = null
function watchEffect(effect) {
  activeEffect = effect
  effect()
  activeEffect = null
}

function reactive(raw) {
  Object.keys(raw).forEach(key => {
    const dep = new Dep()
    let value = raw[key]

    Object.defineProperty(raw, key, {
      get() {
        dep.depend()
        return value
      },
      set(newValue) {
        value = newValue
        dep.notify()
      }
    })
  })
  return raw
}

function compile(template, data) {
  return template.replace(/\{\{(.*?)\}\}/g, (_, key) => {
    return data[key.trim()]
  })
}

class MiniVue {
  constructor(options) {
    this.$data = reactive(options.data())
    this.$el = document.querySelector(options.el)
    this.$template = this.$el.innerHTML

    watchEffect(() => {
      const rendered = compile(this.$template, this.$data)
      this.$el.innerHTML = rendered
    })
  }
}

// 使用示例
const app = new MiniVue({
  el: '#app',
  data() {
    return {
      message: 'Hello Mini Vue!',
      count: 0
    }
  }
})

setInterval(() => {
  app.$data.count++
}, 1000)

核心功能解析

响应式系统

  • 通过reactive函数将普通对象转换为响应式对象
  • 使用Object.defineProperty实现属性拦截
  • Dep类管理依赖关系,实现观察者模式

依赖收集

100行代码实现vue

  • watchEffect函数注册副作用函数
  • 在属性访问时通过depend方法收集依赖
  • 属性变更时通过notify方法触发更新

模板编译

  • 简单实现双大括号插值语法{{}}
  • 通过正则表达式匹配模板中的动态内容
  • 将数据绑定到对应位置实现渲染

使用方法

  1. 创建HTML模板

    100行代码实现vue

    <div id="app">
    <p>{{ message }}</p>
    <p>Count: {{ count }}</p>
    </div>
  2. 初始化MiniVue实例

    const app = new MiniVue({
    el: '#app',
    data() {
     return {
       message: 'Hello World',
       count: 0
     }
    }
    })
  3. 修改数据自动更新视图

    app.$data.message = 'Updated'  // 视图自动刷新

扩展建议

  1. 添加虚拟DOM实现提高性能
  2. 支持事件绑定和指令系统
  3. 实现组件化系统
  4. 添加计算属性和侦听器功能

这个实现省略了生产环境需要的很多特性,但展示了Vue最核心的响应式原理。完整版Vue包含更多优化和功能,但这个简化版有助于理解基本原理。

标签: 代码vue
分享给朋友:

相关文章

vue实现公式

vue实现公式

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

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

vue实现波形

vue实现波形

实现波形效果的方法 在Vue中实现波形效果可以通过多种方式完成,常见的方法包括使用Canvas绘制、CSS动画或第三方库。以下是几种实现方案: 使用Canvas绘制波形 通过Canvas API动态…

vue 实现工具

vue 实现工具

Vue 实现工具的方法 使用 Vue 实现工具功能可以通过多种方式完成,具体取决于工具的类型和需求。以下是几种常见的方法: 组件化实现 创建一个独立的 Vue 组件来封装工具功能。例如,实现一个计…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…