一起学Vue3源码,实现最简Vue3【03】 - 实现 effect 返回 runner

实现 effect 返回 runner

上一章节,实现了effect 和 reactive 的 trick(收集依赖) 和 trigger(触发依赖)。本章继续补充完善effect功能

调用effect会返回一个函数runner, 调用runner会再次执行fn,调用fn, fn会返回一个返回值,ok,我们就来实现这个功能,还是TDD,测试驱动开发。

effect.spec.ts

it("should return runner when call effect", () => {
    // effect(fn) => function(runner) => fn => return
    // 调用effect会返回一个函数runner, 调用runner会再次执行fn,调用fn, fn会返回一个返回值
    let foo = 10;
    const runner = effect(() => {
      foo++;
      return "foo";
    });
    expect(foo).toBe(11);
    const r = runner();
    expect(foo).toBe(12);
    expect(r).toBe("foo");
  });

接下来就是代码实现,调用effect实例,返回一个runner,本质上就是effect上的 run() 函数,
那怎么把当前effect的 run() 导出呢?
改变run的指针,并且是不触发状态。从而我们联想到 bind 方法

effect.ts

// 执行函数
function effect(fn) {
  const _effect = new ReactiveEffect(fn, options?.scheduler);

  _effect.run();
  // 把当前 effect 实例的 run fn 返回出去
  const runner: any = _effect.run.bind(_effect);

  return runner;
}

ok, 测试一下
在这里插入图片描述
注意:新增一个功能后,别忘记再整体测试一遍,以为可能会由于更新新的功能导致整个流程不通

总结

总的来说,本次更新功能点很简单,但是勿以简单而不为。
最后,附上git地址:mini-vue
如果本文对观众老爷们有帮助的话,希望大家帮忙点点star。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值