You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
10 years ago
|
/**
|
||
|
* Copyright 2013-2015, 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.
|
||
|
*
|
||
|
* @providesModule ReactDefaultBatchingStrategy
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var ReactUpdates = require("./ReactUpdates");
|
||
|
var Transaction = require("./Transaction");
|
||
|
|
||
|
var assign = require("./Object.assign");
|
||
|
var emptyFunction = require("./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.Mixin,
|
||
|
{
|
||
|
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) {
|
||
|
var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;
|
||
|
|
||
|
ReactDefaultBatchingStrategy.isBatchingUpdates = true;
|
||
|
|
||
|
// The code is written this way to avoid extra allocations
|
||
|
if (alreadyBatchingUpdates) {
|
||
|
callback(a, b, c, d);
|
||
|
} else {
|
||
|
transaction.perform(callback, null, a, b, c, d);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = ReactDefaultBatchingStrategy;
|