当前位置:首页 > VUE

vue数组实现原理

2026-02-09 12:34:24VUE

Vue 数组响应式原理

Vue 通过重写数组的变异方法(如 pushpopshiftunshiftsplicesortreverse)来实现对数组变化的监听。这些方法被修改后,会在执行原有逻辑的同时触发视图更新。

核心实现机制

Vue 使用 Object.defineProperty 对数组的变异方法进行拦截。具体步骤如下:

  1. 创建拦截器对象
    定义一个对象,包含与原生数组方法同名的方法,但在执行时会额外触发依赖通知。

    const arrayProto = Array.prototype
    const arrayMethods = Object.create(arrayProto)
    
    const methodsToPatch = [
      'push',
      'pop',
      'shift',
      'unshift',
      'splice',
      'sort',
      'reverse'
    ]
    
    methodsToPatch.forEach(function (method) {
      const original = arrayProto[method]
      def(arrayMethods, method, function mutator (...args) {
        const result = original.apply(this, args)
        const ob = this.__ob__
        ob.dep.notify()
        return result
      })
    })
  2. 覆盖目标数组的原型
    当 Vue 初始化数据时,如果遇到数组,会将数组的原型指向自定义的拦截器对象。

    if (Array.isArray(value)) {
      const augment = hasProto
        ? protoAugment
        : copyAugment
      augment(value, arrayMethods, arrayKeys)
      this.observeArray(value)
    }
  3. 处理新增元素
    对于 pushunshiftsplice 等方法新增的元素,Vue 会遍历这些新元素并将其转换为响应式数据。

    if (inserted) ob.observeArray(inserted)

无法检测的情况

由于 JavaScript 的限制,Vue 无法检测以下数组变动:

  • 直接通过索引设置项(如 arr[0] = newValue
  • 修改数组长度(如 arr.length = 0

解决方法:

vue数组实现原理

  • 使用 Vue.setvm.$set
    Vue.set(arr, index, newValue)
  • 使用 splice
    arr.splice(index, 1, newValue)

源码关键点

在 Vue 2.x 源码中,数组响应式处理主要在 src/core/observer/index.jssrc/core/observer/array.js 文件中实现。核心是通过拦截数组方法并触发依赖更新,同时对新元素进行响应式处理。

标签: 数组原理
分享给朋友:

相关文章

vue原理实现

vue原理实现

Vue 的核心原理实现 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是这些核心原理的具体实现方式: 响应式系统 Vue 的响应式系统基于 Object.define…

vue动画实现原理

vue动画实现原理

Vue动画实现原理 Vue的动画系统基于CSS过渡和动画,结合Vue的响应式系统,提供声明式的方式管理元素进入/离开的动画效果。核心原理分为以下几个部分: 过渡类名自动应用 Vue在元素插入…

vue的原理实现

vue的原理实现

Vue 的核心原理实现 Vue.js 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现细节: 响应式系统 Vue 2.x 使用 Object.defineProper…

php购物车的实现原理

php购物车的实现原理

购物车基本概念 购物车是电子商务网站的核心功能之一,允许用户临时存储选中的商品,支持增删改查操作,最终生成订单。PHP实现通常结合Session或数据库存储数据。 Session存储实现 使用PHP…

vue ref实现原理

vue ref实现原理

Vue 3 中 ref 的实现原理 ref 是 Vue 3 响应式系统的核心 API 之一,用于将基本类型或对象转换为响应式引用。以下是其实现原理的关键点: 核心机制 ref 通过创建一个包装对象(…

vue watch 实现原理

vue watch 实现原理

Vue Watch 实现原理 Vue 的 watch 功能用于监听数据变化并执行回调函数。其核心原理基于 Vue 的响应式系统,通过依赖收集和触发更新机制实现。 依赖收集 在 Vue 的响应…