67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
|
/**
|
||
|
* Copyright 2013-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var _assign = require('object-assign');
|
||
|
|
||
|
var ReactUpdates = require('./ReactUpdates');
|
||
|
var Transaction = require('./Transaction');
|
||
|
|
||
|
var emptyFunction = require('fbjs/lib/emptyFunction');
|
||
|
|
||
|
var RESET_BATCHED_UPDATES = {
|
||
|
initialize: emptyFunction,
|
||
|
close: function () {
|
||
|
ReactDefaultBatchingStrategy.isBatchingUpdates = false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var FLUSH_BATCHED_UPDATES = {
|
||
|
initialize: emptyFunction,
|
||
|
close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
|
||
|
};
|
||
|
|
||
|
var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];
|
||
|
|
||
|
function ReactDefaultBatchingStrategyTransaction() {
|
||
|
this.reinitializeTransaction();
|
||
|
}
|
||
|
|
||
|
_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction, {
|
||
|
getTransactionWrappers: function () {
|
||
|
return TRANSACTION_WRAPPERS;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var transaction = new ReactDefaultBatchingStrategyTransaction();
|
||
|
|
||
|
var ReactDefaultBatchingStrategy = {
|
||
|
isBatchingUpdates: false,
|
||
|
|
||
|
/**
|
||
|
* Call the provided function in a context within which calls to `setState`
|
||
|
* and friends are batched such that components aren't updated unnecessarily.
|
||
|
*/
|
||
|
batchedUpdates: function (callback, a, b, c, d, e) {
|
||
|
var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
|
||
|
|
||
|
ReactDefaultBatchingStrategy.isBatchingUpdates = true;
|
||
|
|
||
|
// The code is written this way to avoid extra allocations
|
||
|
if (alreadyBatchingUpdates) {
|
||
|
return callback(a, b, c, d, e);
|
||
|
} else {
|
||
|
return transaction.perform(callback, null, a, b, c, d, e);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = ReactDefaultBatchingStrategy;
|