0x000000 前期准备
- reactive(raw:any) 将js对象转为Proxy()对象,set get监听属性变化。
将raw处理为Proxy()对象,主要是用到set()、get()方法。
set()收集依赖,targetMap() ---> depsMap ---> dep <实质是Set()>。
dep.add(activeEffect)
activeEffect.deps.push(dep);
get()触发依赖, 取出收集的effect,执行run方法。
- ReactiveEffect
属性
deps = [],
方法:
1.run() 执行创建时候的fn <0x000001中fn>
2.stop()
0x000001 effect() 方法梳理,创建 ReactiveEffect对象,运行run()方法。
export function effect(fn: any, options: any = {}) {
const _effect = new ReactiveEffect(fn, options.scheduler);
extend(_effect, options)
_effect.run();
const runner: any = _effect.run.bind(_effect);
runner.effect = _effect;
return runner;
}
0x000002