Quando si risponde a eventi sintetici come onClick e così via, le modifiche allo stato dei componenti vengono raggruppate in modo tale che molte chiamate a this.setState per lo stesso componente comporteranno un solo rendering.
Se si modifica lo stato in risposta ad un altro richiamo asincrono (ad esempio AJAX o setTimeout), ogni chiamata a this.setState comporterà un rendering. Puoi avvolgere il tuo lavoro in batchUpdates (..) per evitare questo.
var React = require('react/addons');
var batchedUpdates = React.addons.batchedUpdates;
var request = require('superagent'); // AJAX lib
var req = request('GET', ...).end(function(err, res) {
// invoked when AJAX call is done
batchedUpdates(function(){
.. all setState calls are batched and only one render is done ...
})
});
fonte
2015-05-29 13:11:14
Include un equivalente di Ember.run()? vale a dire. un modo per aggiornare i batch al di fuori del normale ciclo degli eventi di React? –
React ha un modo predefinito per gli aggiornamenti batch che iirc usa setTimeout. Ciò consente di specificare un'alternativa o di ottenere dati, analisi, ecc. Senza saperne di più su Ember.run, direi che è simile. – FakeRainBrigand