比如有一个模版
<p>{{a}}</p>
vue 的数据:
const vm = new Vue({
data: () => ({
a: 'a',
b: 'abc'
})
})
当我修改 a 时,视图更新了。
当我尝试修改 b 时,那么 vue 内部有没有进行更新,或者说 vue 如何知道 b 被修改了,却不需要更新视图的?
1
akatquas 2019-01-09 23:31:19 +08:00 via iPhone
文档文档,
3.0 以前是 defineProperty 里面劫持 3.0 以后我没看到,估计是是 Proxy 触发 ╮( ̄▽ ̄"")╭ |
2
Biwood 2019-01-09 23:35:01 +08:00
virtual dom diffing algorithm,其实还是借鉴了 react.js 的思路,在使用这类框架的时候建议还是了解一下设计思想以及实现原理
|
3
FakeLeung OP |
4
Lxxyx 2019-01-10 04:33:07 +08:00 via Android
getter 来做依赖收集,也就是说,如果你在模板或者方法里面调用了这个变量,那么框架就知道这个变量是有人使用的,在这个变量变化的时候会通知那些使用它的地方
|
5
redbuck 2019-01-16 10:44:26 +08:00
初始化的时候劫持 data 里的所有属性的 set/get 操作(defineProperty),同时解析模板的时候会收集模板里用到的属性(依赖收集),对属性进行 set 操作的时候,会通知所有订阅者更新 dom
|