实现 effect 返回 runner

实现 effect 返回 runner

实现 effect 返回 runner
实现 effect 返回 runner

编写单测

it('runner'() => {
    // runner 就是 effect(fn) 返回一个函数,执行该函数就相当于重新执行了一次传入 effect 的 fn
    // 同时执行 runner 也会将 fn 的返回值返回
    let foo = 1
    const runner = effect(() => {
        foo++
        return 'foo'
    })
    expect(foo).toBe(2)
    // 调用 runner
    const r = runner()
    expect(foo).toBe(3)
    // 获取 fn 返回的值
    expect(r).toBe('foo')
})

实现

// effect.ts
class ReactiveEffect {
  private _fn: any
  constructor(fn) {
    this._fn = fn
  }
  run() {
    activeEffect = this
    const res = this._fn()
    // [runner] return 运行的值
    return res
  }
}

// other code ...


export function effect(fn{
  const _effect = new ReactiveEffect(fn)
  _effect.run()
  // [runner]: 在这里将 run 方法 return 出去
  // 但是要注意 this 指向问题,所以可以 bind 后 return 出去
  return _effect.run.bind(_effect)
}

再次测试一下,测试样例就可以通过了


原文始发于微信公众号(WEB大前端):实现 effect 返回 runner

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/225221.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!