Wenn auf synthetische Ereignisse wie onClick usw. reagiert wird, werden Änderungen am Komponentenstatus im Stapel verarbeitet, sodass viele Aufrufe von this.setState für dieselbe Komponente nur zu einem Rendervorgang führen.
Wenn Sie Zustand als Reaktion auf einen anderen Asynchron-Rückruf zu ändern sind (zum Beispiel AJAX oder setTimeout), dann wird jeder Anruf zu this.setState in einem Render führen. Sie können Ihre Arbeit in batchedUpdates (..) verpacken, um dies zu vermeiden.
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 ...
})
});
Enthält es ein Äquivalent von Ember.run()? dh. eine Möglichkeit, Aktualisierungen außerhalb von Reacts normaler Ereignisschleife zu stapeln? –
React hat eine Standardmethode für Batch-Aktualisierungen, die von der IIRC mit setTimeout verwendet wird. Auf diese Weise können Sie eine Alternative angeben oder Daten, Analysen usw. daraus entfernen. Ohne mehr über Ember.run zu wissen, würde ich vermuten, dass es ähnlich ist. – FakeRainBrigand