`

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
分享到:
评论

相关推荐

    2024全新付费进群系统源码 Thinkphp框架全开源独立版 九块九进群源码 付费入群进群源码

    最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新微信付费进群源码全开源版最新...

    微信小程序 商城 (源码)

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

    微信小程序商城系统源码

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

    彩票网站源码_php彩票源码程序,彩票系统全套源码php

    【标题】"彩票网站源码_php彩票源码程序,彩票系统全套源码php"涉及到的知识点主要涵盖了彩票网站开发的核心技术、架构以及部署流程。彩票网站的开发通常基于Web技术,这里的源码采用PHP作为服务器端脚本语言,MySQL...

    SSCOM源码 DELPHI 源码

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

    dhcp源码 dhcp源码 ,很不错的源码

    在深入理解DHCP源码之前,我们首先需要了解DHCP协议的基本工作流程。 DHCP协议包括四个主要的步骤:发现(Discovery)、提供(Offer)、请求(Request)和确认(Ack)。当一个新设备(客户端)加入网络时,它会广播...

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

    Unity游戏代码 ,Unity经典游戏源码 , 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/...

    易语言屏幕画准星源码

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

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

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

    asp源码 asp源码 asp源码

    asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码 asp源码

    码支付系统源码免挂版_免挂码支付系统源码,码支付系统源码,码支付源码.zip

    码支付系统源码免挂版_免挂码支付系统源码,码支付系统源码,码支付源码

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

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

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

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

    STL源码剖析pdf及源码.zip

    《STL源码剖析》是由著名C++专家侯捷编著的一本深入解析STL(Standard Template Library,标准模板库)的权威书籍。这本书详细介绍了STL的核心组件,包括容器、迭代器、算法和函数对象,以及它们在实际编程中的应用...

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

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

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

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

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

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

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

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

    cocos creator完整麻将源码下载

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

Global site tag (gtag.js) - Google Analytics