Vue源码阅读(三)
响应式数据
data**,props,computed,watch**
响应式原理
Object.defineProperty** + 观察者模式**1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// 定义响应式,
function defineReactive (obj, key, val) {
Object.defineProperty(obj, key, {
enumerable: false,
configurable: true,
get: function getter () {
console.log('get:' + key)
return val
},
set: function setter (newVal) {
console.log('set: ' + key)
val = newVal
}
})
}
const data = { name: '张三 ', age: 18 }
const keys = Object.keys(data)
keys.map(key => {
defineReactive(data, key, data[key])
})
console.log(data.name) // get: name
data.age = 20 // set: age

observe (vm.data)

render.call(vm)

vm.flag = 1 —-> vm.flag.set(1)
案例分析
1 | // 1 |
event-loop

ISSUE(#3371)
