effect的基本实现
export let activeEffect = undefined;
class ReactiveEffect {
active = true;
deps = [];
parent = undefined;
constructor(public fn) {
}
run() {
if (!this.active) {
return this.fn();
}
try {
this.parent = activeEffect;
activeEffect = this;
return this.fn();
} finally {
activeEffect = this.parent;
this.parent = undefined;
}
}
}
export function effect(fn, options?) {
const _effect = new ReactiveEffect(fn);
_effect.run();
}
依赖收集
get(target, key, receiver) {
if (key === ReactiveFlags.IS_REACTIVE) {
return true;
}
const res = Reflect.get(target, key, receiver);
track(target, 'get', key);
return res;
}
const targetMap = new WeakMap();
export function track(target, type, key)