Options
Watch
- 渲染 watcher
- 计算属性 watcher
<p>{{ fullName }}</p>
new Vue({
computed: {
fullName: {
get() {
return this.firstName + " " + this.lastName;
},
set(newValue) {
this.firstName = newValue;
},
},
},
});
- 当在页面直接写 fullName 时,fullName 不会去收集渲染 watcher。因为 fullName 没有 dep,没有收集的功能
- firstName 是在计算属性中用的,所以它会收集计算属性 watcher,没有收集渲染 watcher
- 计算属性的值应该同时记录 计算属性 watcher 和渲染 watcher
- 通过 Dep.target 上赋值一个渲染 watcher,又将 Dep.target 设置为计算属性 watcher
Computed
计算属性的本质就是 watcher
- 计算属性默认不执行 => Object.defineProperty ==> getter
- 多次取值如果依赖的值不变化,就不会重新执行
- 依赖的值变化,需要重新执行
- dirty 默认是 true,表示需要调用 getter
this.dirty = this.lazy;