当前位置: 首页 > news >正文

第六章 effect.scheduler功能实现

effect.scheduler功能实现

主要先了解scheduler需要实现什么样的需求,有一下四点:

1 通过 effect 的第二个参数给定一个 scheduler 的 fn

2 effect 第一次执行的时候 还会执行 fn

3 当 响应式对象 set update 不执行fn 而是执行 scheduler

4 如果说当执行 runner 的时候 会再次执行 fn

清楚了scheduler需求后,照旧先来看测试案例,通过测试案例来驱动代码开发:

it("scheduler",()=>{// 1 通过 effect 的第二个参数给定一个 scheduler 的 fn// 2 effect 第一次执行的时候 还会执行 fn// 3 当 响应式对象 set update 不执行fn 而是执行 scheduler// 4 如果说当执行 runner 的时候 会再次执行 fnlet dummylet run:anyconst scheduler = jest.fn(()=>{run = runner})const obj = reactive({foo:1})const runner = effect(()=>{dummy = obj.foo},{ scheduler })expect(scheduler).not.toHaveBeenCalled()expect(dummy).toBe(1)obj.foo++expect(scheduler).toHaveBeenCalledTimes(1)run()expect(dummy).toBe(2)})

在测试用例中我们就可以看到,我们往effect中传入了第二个参数options,并且在options中有scheduler函数,所以我们就可以在effect中接受到我们传入的options:

接下来我分别一截图的方式展示增加的代码并且附上解释:

effect实例中存储scheduler:

image.png

当 响应式对象 set update 执行 scheduler

image.png

最后

附上trigger完整代码:

export function trigger(target,key){const depsMap = targetMap.get(target)const dep = depsMap.get(key)for (const effect of dep) {if(effect.scheduler){effect.scheduler()} else {effect.run()}}}

附上effect完整代码:

export function effect(fn,options:any = {}){const _effect = new ReactiveEffect(fn,options.scheduler)_effect.run()return _effect.run.bind(_effect)
}
http://www.lryc.cn/news/25941.html

相关文章:

  • 软件测试之zentao
  • 美颜sdk动态贴纸的实现流程
  • Web连接器
  • 插上数据的翅膀,开启我升职加薪的梦想之旅
  • 来香港饮茶吹水先,免费报名Zabbix Meetup香港站!
  • 李群李代数求导-常用求导公式
  • IIS之web服务器的安装、部署以及使用教程(图文详细版)
  • 进程的介绍
  • hadoop shell 练习题
  • 优化Linux系统性能的必杀技:调整进程优先级!学会使用nice命令,让你的系统飞一般的顺畅!
  • fastdds router-3.开始
  • 云服务器ECS 什么是云服务器ECS?
  • 【socket网络编程】
  • 【验证码逆向专栏】某验三代、四代一键通过模式逆向分析
  • 《MySql学习》 MySQL的 加锁规则
  • 软件测试(linux命令篇-01文件操作命令)
  • Code Virtualizer 3.1.4 Crack
  • Torch同时训练多个模型
  • LCR数字电桥软件下载安装教程
  • C++模板写法详解
  • 【备战面试】每日10道面试题打卡-Day2
  • “数字档案室测评”相关参考依据梳理
  • android 动态加载jar包
  • JAVA版B2B2C商城源码多商户入驻商城
  • 测试人员如何在测试环境数据库批量生成测试数据?方案分享
  • 【el】表单
  • 【Flutter入门到进阶】Flutter基础篇---布局
  • python海龟绘图
  • 【计算机网络】数据链路层
  • 使用groovy代码方式解开gradle配置文件神秘面纱