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.
71 lines
1.9 KiB
71 lines
1.9 KiB
/** |
|
* 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;
|
|
|