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 函数,实现数据的响应式绑定。