第一步
src源目录下创建computed.ts
导出computed函数,并对参数进行判断
如果是个函数,直接赋值给getter,否则分别取参数get和set赋值给getter和setter
最后返回一个ComputedRefImpl类实例
第二步
创建一个ComputedRefImpl,接收getter和setter
做一个标识_dirty,默认取值时不用缓存
第三步
计算属性默认会产生一个effect,在constructor生成,将getter传入
get里
注:第一次取值的时候才会重新去计算,第二次取就会取缓存里的
当修改值的时候我们还需要把_dirty改回true,在创建effect的时候传入scheduler,当被执行的时候判断一下当前的_dirty,如果是false,就改为true
effects源码里,当值改变的时候,执行当前属性所收集effect,此时去判断当前执行的effect参数里是否有scheduler,如果有就执行scheduler
第四步
计算属性get时也要收集依赖,vue2里计算属性是不具备的
修改的时候调用trigger
这样修改的时候也就可以通知父级的effect执行了,这种情况就是处理计算属性放到effect中
如果您觉得有所收获,麻烦动动小手点个攒,谢谢啦~ 预知后事如何,且听下回分解~