Vue 响应式数据绑定原理

2023-05-18 11:53:32

Vue 响应式数据绑定原理

Vue 是一款流行的前端框架,其最大的特点就是响应式的数据绑定。本文将简单介绍 Vue 的响应式数据绑定原理。

Vue 的响应式数据绑定原理是通过 Object.defineProperty 实现的。在 Vue 实例化时,Vue 会通过 walk 函数将 data 对象的每个属性转换成 getter 和 setter 函数。当属性被读取或设置时,就会执行对应的 getter 和 setter 函数,从而实现响应式数据绑定。

function walk(obj: Object) {
  const keys = Object.keys(obj)
  for (let i = 0; i< keys.length; i++) {
    defineReactive(obj, keys[i])
  }
}

function defineReactive(obj, key, val) {
  if (arguments.length === 2) {
    val = obj[key]
  }

  if (typeof val === 'object') {
    walk(val)
  }

  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get: function reactiveGetter() {
      console.log(`Get value of ${key}:${val}`)
      return val
    },
    set: function reactiveSetter(newVal) {
      console.log(`Set value of ${key}:${newVal}`)
      val = newVal
    }
  })
}

const data = {
  name: 'Vue',
  version: 3,
  author: {
    name: 'Evan You',
    age: 31
  }
}

walk(data)

data.name
// Output: Get value of name:Vue
//        "Vue"

data.version = 4
// Output: Set value of version:4

data.author.age
// Output: Get value of author:{"name":"Evan You","age":31}
//        Get value of age:31
//        31

当数据发生变化时,会触发 setter 函数的执行,从而执行对应的更新函数,将页面中的数据更新成最新的值。

以上就是 Vue 响应式数据绑定原理的简单介绍。通过 Object.defineProperty 实现 getter 和 setter 函数,实现数据的响应式绑定。

  • 作者:
  • 原文链接:
    更新时间:2023-05-18 11:53:32