render
在调用之后返回虚拟dom,渲染器是把虚拟dom转换为真实dom
组件的本质
组件就是一组dom元素的封装,本质就是一个对象
Vue响应式数据原理
命令式框架关注过程,需要操作dom元素
声明式框架关注结果。本质上是对命令式框架底层代码的一个封装,只关注结果,而不关注具体操作的过程。
几乎所有的文章和教程,在讲解Vue
响应式系统时都会先讲:Vue
使用Object.defineProperty
来进行数据劫持。下面,我们为obj
定义一个a
属性
const obj = {}
let val = 1
Object.defineProperty(obj, a, {
get() { // 下文中该方法统称为getter
console.log('get property a')
return val
},
set(newVal) { // 下文中该方法统称为setter
if (val === newVal) return
console.log(`set property a -> ${newVal}`)
val = newVal
}
})
这样,当我们访问obj.a
时,打印get property a
并返回1,obj.a = 2
设置新的值时,打印set property a -> 2
。这相当于我们自定义了obj.a
取值和赋值的行为,使用自定义的getter
和setter
来重写了原有的行为,这也就是数据劫持
的含义。