当前位置:首页 > 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 实现前端注册功能 注册表单设计 使用 Vue 的模板语法创建注册表单,包含用户名、邮箱、密码和确认密码字段。表单需绑定 v-model 实现双向数据绑定。 <template>…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <templ…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout()…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用…