2016-07-05 3 views
2

Ich bin mir nicht sicher, ob es Standardverhalten oder Redux oder etwas anderes ist aber ich fand, dass beim Ausführen einer Aktion diese Aktion durch alle Reduzierungen läuft (das ist ok), aber es ruft auch den Connect-Listener jedes Reduzierers auf, der das resultierende Rendering seiner Komponente weiterführt. Dies bedeutet, dass bei jedem Dispatch alle Komponenten innerhalb des App-Statusbaums gerendert werden. Ist dies absichtlich getan von Redux oder ich habe etwas Unrecht getan. Hilf mir, diese Dinge zu klären.Alle Komponenten werden gerendert, auch wenn wir nur einen in reduce rendern mussten

Antwort

1

In Redux ist Ihr Status global und wird von redux gehandhabt. Wenn Sie eine Aktion versenden, setzen Sie nur den globalen Status. Ihre Containerkomponenten erhalten den neuen Status und der Reducer würde an ihnen arbeiten, aber Ihre Komponenten werden nicht neu gerendert, da der vorherige Status und der nächste Status identisch sind.

nur diejenigen Komponenten würden deren mapStatetoProps führen zu einem anderen Ergebnis

2

Dieses Verhalten ist völlig in Ordnung gemacht werden. Siehe die React Docs für ihr virtuellen DOM Konzept:

Reagieren Verwendung eines virtuellen DOM macht, die ein Beschreiber einer DOM-Unterstruktur ist im Browser gerendert. Diese parallele Darstellung ermöglicht es React, das Erstellen von DOM-Knoten und den Zugriff auf vorhandene Knoten zu vermeiden. Dies ist langsamer als bei JavaScript-Objekten. Wenn sich Requisiten oder Status einer Komponente ändern, entscheidet React, ob eine tatsächliche DOM-Aktualisierung erforderlich ist, indem ein neues virtuelles DOM erstellt und mit dem alten verglichen wird. Nur in dem Fall, dass sie nicht gleich sind, wird React das DOM abstimmen und so wenig Mutationen wie möglich anwenden.

So müssen Sie sich keine Sorgen machen, dass jede Komponente jedes Mal neu gerendert wird, wenn Sie eine Aktion versenden.

Verwandte Themen