`

CallbackQueue源码

 
阅读更多

CallbackQueue模块用于添加、执行、重置回调函数队列,机能同jquery中的同名模块。

react中,使用var Export=PooledClass.addPoolingTo(CallbackQueue)工厂化CallbackQueue构造函数,实现功能是管理CallbackQueue实例的创建—— Export.getPooled方法、实例数据(回调函数及其执行上下文)的销毁—— Export.release方法。销毁数据的实例存入Export.instancePool实例池中,可通过Export.getPooled方法取出。

 

'use strict';

var _prodInvariant = require('./reactProdInvariant');// 生产环境React形式带url报错

// 校验构造函数必须带new关键字调用,不能作为普通函数使用
function _classCallCheck(instance, Constructor) { 
  if (!(instance instanceof Constructor)) { 
    throw new TypeError("Cannot call a class as a function"); 
  } 
}

// PooledClass.addPoolingTo(CopyConstructor)用于将构造函数CopyConstructor转化为工厂函数
// 意义是管理实例数据的创建和销毁,并将销毁数据的实例推入到实例池CopyConstructor.instancePool中
var PooledClass = require('./PooledClass');

// invariant(condition,format,a,b,c,d,e,f) condition为否值,替换format中的"%s",并throw error报错  
var invariant = require('fbjs/lib/invariant');

// 用于添加、执行、重置回调函数队列;react中实际使用是用于挂载componentDidMount等钩子方法
// 通过PooledClass模块管理实例的创建CallbackQueue.getPooled,以及实例数据的销毁CallbackQueue.release
var CallbackQueue = function () {
  function CallbackQueue(arg) {
    _classCallCheck(this, CallbackQueue);

    this._callbacks = null;
    this._contexts = null;
    this._arg = arg;
  }

  // 往回调队列中添加回调函数及其执行的上下文,通过notifyAll方法触发
  CallbackQueue.prototype.enqueue = function enqueue(callback, context) {
    this._callbacks = this._callbacks || [];
    this._callbacks.push(callback);
    this._contexts = this._contexts || [];
    this._contexts.push(context);
  };

  // 触发回调函数队列内函数的执行;回调函数个数与其执行上下文个数不匹配,则报错
  CallbackQueue.prototype.notifyAll = function notifyAll() {
    var callbacks = this._callbacks;
    var contexts = this._contexts;
    var arg = this._arg;
    if (callbacks && contexts) {
      !(callbacks.length === contexts.length) ? 
        process.env.NODE_ENV !== 'production' ? 
          invariant(false, 'Mismatched list of contexts in callback queue') 
          : _prodInvariant('24') 
        : void 0;
      this._callbacks = null;
      this._contexts = null;
      for (var i = 0; i < callbacks.length; i++) {
        callbacks[i].call(contexts[i], arg);
      }
      callbacks.length = 0;
      contexts.length = 0;
    }
  };

  // 获取回调函数队列中的回调函数个数
  CallbackQueue.prototype.checkpoint = function checkpoint() {
    return this._callbacks ? this._callbacks.length : 0;
  };

  // 将回调函数队列中的回调函数个数设定为参数len
  CallbackQueue.prototype.rollback = function rollback(len) {
    if (this._callbacks && this._contexts) {
      this._callbacks.length = len;
      this._contexts.length = len;
    }
  };

  // 重置回调函数队列
  CallbackQueue.prototype.reset = function reset() {
    this._callbacks = null;
    this._contexts = null;
  };

  // PooledClass模块装饰需要,设置destructor方法供release方法使用,用于销毁实例数据
  CallbackQueue.prototype.destructor = function destructor() {
    this.reset();
  };

  return CallbackQueue;
}();

// 通过PooledClass模块管理实例的创建CallbackQueue.getPooled,以及实例数据的销毁CallbackQueue.release
module.exports = PooledClass.addPoolingTo(CallbackQueue);

 

0
0
分享到:
评论

相关推荐

    微信小程序商城系统源码

    微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)...

    PUBG雷达网页透视源码

    PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码PUBG雷达网页透视源码...

    SSCOM源码 DELPHI 源码

    SSCOM源码 DELPHI 源码 绝对源码!欢迎下载

    unity武侠游戏源码

    unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码unity武侠角色扮演游戏源码...

    autojs源码2000多源码,付费群源码

    自己搜集的源码,非常多。。一部分论坛 有了。一起打包吧。另一部分精品源码,都是来自己其他地方,主要是付费群和教学群。 2020/09/04 周五 23:52 400 1.数据类型.js 2020/09/04 周五 23:52 719 2.运算符.js 2020/...

    Unity精品农场经营游戏源码unity完整项目

    Unity游戏代码 ,Unity经典游戏源码 , Unity休闲游戏源码, Unity容易上手的游戏源码,Unity小游戏源码,Unity新手练习源码,Unity个人开发源码,Unity优秀项目,Unity商店优秀作品。 Unity精品农场经营游戏源码unity完整...

    易语言屏幕画准星源码

    易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码易语言屏幕画准星源码...

    微信小程序源码下载 微信小程序源码下载 2000套微信小程序源码

    本资源包含2000套微信小程序的源码,对于开发者来说是一份宝贵的参考资料,可以用来学习、研究或者作为开发新项目的起点。 源码下载是开发者获取程序原始代码的方式,对于学习和理解编程逻辑至关重要。这些微信小...

    网狐源码全套源码+详细架设教程

    【网狐源码全套源码+详细架设教程】是一个包含全面的网狐框架源代码和相关教程资源的集合,适合于对网狐框架感兴趣、想要深入学习或进行实际项目开发的IT从业者。这个压缩包提供了从基础到高级的全方位学习材料,...

    电商微信小程序源码+后台

    电商微信小程序源码+后台分享,亲测可用,有需要的朋友拿去!!! 电商微信小程序源码+后台分享,亲测可用,有需要的朋友拿去!!! 电商微信小程序源码+后台分享,亲测可用,有需要的朋友拿去!!! 电商微信小程序...

    微信小程序源码、小游戏源码总的70个!

    小程序源码、小游戏源码下载地址: https://gitee.com/giteesource/app/blob/master/resource/1008.md 包含源码有: 1、游戏小程序:轻松愉快的休闲时光 2、商城小程序:便捷的在线购物体验 3、工具小程序:实用的...

    借贷公司源码 网贷平台源码 php借贷源码

    【借贷公司源码 网贷平台源码 php借贷源码】这个标题揭示了我们要讨论的核心内容,即一套用于建立在线借贷或网贷平台的源代码,该源代码是基于PHP编程语言实现的。PHP是一种广泛使用的开源服务器端脚本语言,尤其在...

    变速齿轮 易语言源码 变速齿轮源码 变速器源码

    易语言源码就是用这种语言编写的程序代码,通过阅读和理解这些源码,开发者可以学习到如何利用易语言来实现特定功能,比如变速齿轮。 在易语言中实现变速齿轮功能,主要涉及到以下几个关键知识点: 1. **系统时间...

    饿了么源码 百度外卖源码 美团外卖源码 外卖系统源码

    订餐网,外卖网源码,带积分商城,商家系统,外卖网站建设! 系统特点: 周密策划、项目为先 "项目指导技术,技术服从项目",这是我们一贯秉承的原则,也是我们与其他系统开发商、网站建设公司的本质区别所在!我们...

    Ext JS源码分析与开发实例宝典光盘源码

    Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发实例宝典光盘源码Ext JS源码分析与开发...

    移动医疗APP源码 android (安卓版)妙手医生源码

    移动医疗APP源码是开发医疗健康应用的核心组成部分,它包含了应用程序的所有逻辑和界面设计。在Android平台上,这种源码通常是用Java或Kotlin语言编写的,并使用Android Studio作为集成开发环境(IDE)。在这个案例...

    cocos creator完整麻将源码下载

    《cocos creator完整麻将源码解析与开发指南》 cocos Creator是一款强大的2D游戏开发引擎,被广泛应用于游戏开发,尤其是休闲娱乐类游戏,如麻将。本篇将深入探讨"麻将源码"这一主题,结合cocos Creator的特性,为...

    微信H5游戏源码 H5游戏玫瑰夺宝源码 H5游戏竞猜游戏源码+视频搭建教程

    【H5游戏源码】微信H5游戏源码 H5游戏玫瑰夺宝源码 H5游戏竞猜游戏源码+视频搭建教程 H5游戏玫瑰夺宝源码源码已经测试,完全无问题可正常搭建,但是有无后门没有去检测,暂且时不知道后门的问题,免费提供给大家,...

    JAVA WEB 校园订餐系统项目源码+数据库

    JAVA WEB 校园订餐系统项目源码+数据库 JAVA WEB 校园订餐系统项目源码+数据库 JAVA WEB 校园订餐系统项目源码+数据库 JAVA WEB 校园订餐系统项目源码+数据库 JAVA WEB 校园订餐系统项目源码+数据库 JAVA WEB 校园...

    Java springboot医院管理系统源码 his源码+安装视频

    Java springboot医院管理系统源码 his源码+安装视频+文档 开发技术:springboot+shiro+layui+jquery+thymeleaf 运行环境:jdk8+mysql+IntelliJ IDEA+maven 1.门诊管理、2.住院管理、3.系统管理、4.统计管理、 5....

Global site tag (gtag.js) - Google Analytics