实现 effect 返回 runner

  1. runner 功能:

    • 执行 runner 方法就会执行传入的 fn 函数
    • 返回值是 fn 函数的返回值
  2. 实现代码

class ReactiveEffect {
  private _fn: any;
  constructor(fn) {
    this._fn = fn
  }
  run() {
    activeEffect = this
    return this._fn()
  }
}

let activeEffect
export function effect(fn) {
  // fn
  const _effect = new ReactiveEffect(fn)
  _effect.run()
  return _effect.run.bind(_effect)
}
  1. 测试代码
it("should return runner", () => {
  // runner 方法: effect返回一个 runner 方法,执行 runner 方法就会执行传入的 fn 函数,返回值是 fn 函数的返回值
  let foo = 1;
  const runner = effect(() => {
    foo++;
    return "foo";
  });
  expect(foo).toBe(2);
  const r = runner();
  expect(foo).toBe(3);
  expect(r).toBe("foo");
});
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐