想起上次面试,被问了个古老的问题:watch 和 computed 的区别。多少有点感慨,现在已经很少见这种耳熟能详的问题了,网络上八股文不少。今天,我更想分享一下从源码的层面来区别这八竿子打不着的两者。上一篇看了watch的源码,本篇针对computed做分析。
一、类型声明computed的源码在reactivity/src/computed.ts里,先来看看相关的类型定义:
ComputedRef:调用computed得到的值的类型,继承自WritableComputedRef;
WritableComputedRef:继承自Ref,拓展了一个effect属性;
ComputedGetter:传递给ComputedRef的构造器函数,用于创建effect;
ComputedSetter:传递给ComputedRef的构造器函数,用于在实例的值被更改时,即在set中调用;
WritableComputedOptions:可写的Computed选项,包含get和set,是computed函数接收的参数类型之一。
1234567891011121314151617181920212 ...
