-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 141 题:Vue 中的 computed 是如何实现的 #291
Comments
实质是一个惰性的watcher,在取值操作时根据自身标记 dirty属性返回上一次计算结果/重新计算值 |
computed本身是通过代理的方式代理到组件实例上的,所以读取计算属性的时候,执行的是一个内部的getter,而不是用户定义的方法。 computed内部实现了一个惰性的watcher,在实例化的时候不会去求值,其内部通过dirty属性标记计算属性是否需要重新求值。当computed依赖的任一状态(不一定是return中的)发生变化,都会通知这个惰性watcher,让它把dirty属性设置为true。所以,当再次读取这个计算属性的时候,就会重新去求值。 反对楼上说的,惰性watcher/计算属性在创建时是不会去求值的,是在使用的时候去求值的。 |
确实,更正一下 |
这本电子书改版了,所以之前的链接失效了,回到首页就可以看到了 |
computed中的属性,通过代理,代理到vue的data上,对data进行处理的时候,已经添加了getter方法,然后当从vue实例上取该值的时候,将实例本身传递进computed函数内部,然后就可以拿到返回值了。 |
在initComputed中遍历每一个computed属性,创建对应的Watcher。在Watcher实例化过程中,计算computed属性结果,会对依赖的data进行取值,从而触发data的getter进行依赖收集,将当前Watcher加入到订阅者数组中。当computed属性依赖的data改变时,会触发data的setter通知订阅者更新,这个computed会重新计算。 |
初始化阶段: 第一次获取计算属性值:
第二次获取计算属性值: |
所以computed的缓存是什么原因呢 |
No description provided.
The text was updated successfully, but these errors were encountered: