最新版本的 computed 值发生变化之后是如何触发重新渲染的呢?
来源:5-2 计算属性 VS 侦听属性(2)

月上云流
2020-01-26
老师,最新版本的 computed 值发生变化之后是如何触发重新渲染的呢?
我在源码中只看到了computed watcher 依赖的响应对象在触发他们的 set 之后会执行 dep.notify 进而执行 computed watcher 自身的 update,而 update (因为 watcher.lazy 为 true) 仅仅是将 watcher.dirty (我理解为缓存flag) 变成 true 而已,也就是下次取watcher.value的值就要重新计算而已,并没有代码去重新渲染视图或者触发 渲染watcher 的 update 啊
写回答
2回答
-
月上云流
提问者
2020-01-26
老师我懂了。。。
原来是 computed watcher 收集完依赖之后又将这些依赖全部放到了渲染 watcher 中,这样就会同时出发computed值的更新和重新渲染了,这个藏得好深啊
function createComputedGetter (key) { return function computedGetter () { const watcher = this._computedWatchers && this._computedWatchers[key] if (watcher) { if (watcher.dirty) { watcher.evaluate() // 这一步Dep.target是这个computed watcher,完成了依赖收集,然后因为执行了popTarget,Dep.target 变回了渲染watcher } if (Dep.target) { watcher.depend() // 这一步将刚才收集的依赖又添加到了渲染watcher中 } return watcher.value } } }
我这样理解对吗?
222021-06-06 -
慕斯1307019
2021-07-07
插个眼,现在还是有点迷,等下再回来看看
00
相似问题