Skip to content

如何在多个Effect实例准确切换激活的 ​

本节目标:理解“如何在多个Effect实例准确切换激活的”的核心思路,并能把它用于实际开发或面试表达。

方案一:使用栈,不停的入栈出栈;

方案二:弄一个树形结构,在每一个Effect上添加一个指针parent,用来指向入上一个effect;当fn执行完后,将指针指回到parent,即上一个effect;

方案二只要添加一个指针,优于方案一的栈;
export let activeEffect = undefined;
// 拥有一个run方法,就是执行effect
class ReactiveEffect {
  ==public== ==parent== ===== ==null====;==
  // 创建的effect默认是激活的
  public active = true
  // public修饰符会在实例上添加这个参数作为属性
  // 相当于this.fn=fn
  constructor(public fn) { }
  run() {
    // 如果是非激活的,只需要执行函数,不需要进行依赖收集
    if (!this.active) {
      this.fn();
    }
    try {
      ==//== ==第一个实例的====parent====是====undefined==
      ==this====.====parent== ===== ==activeEffect====;==
      activeEffect = this;
      return this.fn();
    } finally {
      ==//== ==代码执行完后,==
      ==//== ==一、重置====activeEffect====,指向====parent==
      ==activeEffect== ===== ==this====.====parent====;==
      ==//== ==二、重置====parent====指针====,undefined?==
      ==this====.====parent== ===== ==null====;==
    }
  }
}

本站总访问 — 次