2014-11-16 18 views

Antwort

0

Die standardmäßige Batch-Update-Strategie eignet sich hervorragend für Ihre durchschnittliche Website. Manchmal haben Sie zusätzliche Anforderungen und müssen davon abweichen.

Der Grund, warum dies veröffentlicht wurde, ist für eine AnfrageAnimationFrame Stapelstrategie, die besser für Spiele und Websites ist, die oft und an vielen Orten aktualisiert werden müssen.

Es ist nur ein Erweiterungspunkt, um Probleme mit Randbearbeitungen zu lösen.

+0

Enthält es ein Äquivalent von Ember.run()? dh. eine Möglichkeit, Aktualisierungen außerhalb von Reacts normaler Ereignisschleife zu stapeln? –

+0

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

7

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 ... 
    }) 
}); 
+0

Vielen Dank dafür. Ich akzeptierte Tastaturereignisse von Mousetrap.js und fragte mich, warum die Stapelverarbeitung für Statusänderungen nicht funktionierte. Dies beantwortete meine Frage und lieferte die Lösung. – Raman