Ich habe Redux erst kürzlich entdeckt . Es sieht alles gut aus. Gibt es Nachteile, Probleme oder Kompromisse bei der Verwendung von Redux über Flux? Vielen Dank
quelle
Redux Autor hier!
Ich möchte sagen, dass Sie damit die folgenden Kompromisse eingehen werden:
Sie müssen lernen, Mutationen zu vermeiden. Flux ist nicht begeistert von der Mutation von Daten, aber Redux mag keine Mutationen und viele Pakete, die zu Redux komplementär sind, gehen davon aus, dass Sie den Status niemals mutieren. Sie können dies mit Nur- Entwickler- Paketen wie redux-immutable-state-invariant erzwingen , Immutable.js verwenden oder sich und Ihrem Team vertrauen, um nicht mutativen Code zu schreiben, aber Sie müssen sich dessen bewusst sein, und das muss auch so sein Seien Sie eine bewusste Entscheidung, die von Ihrem Team akzeptiert wird.
Sie müssen Ihre Pakete sorgfältig auswählen. Während Flux explizit nicht versucht, Probleme in der Nähe wie Rückgängig / Wiederherstellen , Persistenz oder Formulare zu lösen , verfügt Redux über Erweiterungspunkte wie Middleware und Store Enhancer und hat ein junges, aber reichhaltiges Ökosystem hervorgebracht . Dies bedeutet, dass die meisten Pakete neue Ideen sind und noch nicht die kritische Masse der Nutzung erhalten haben. Sie könnten sich auf etwas verlassen, das einige Monate später eindeutig eine schlechte Idee sein wird, aber es ist noch schwer zu sagen.
Sie werden noch keine schöne Flow-Integration haben. Mit Flux können Sie derzeit sehr beeindruckende statische Typprüfungen durchführen, die Redux noch nicht unterstützt . Wir werden dort ankommen, aber es wird einige Zeit dauern.
Ich denke, die erste ist die größte Hürde für Anfänger, die zweite kann ein Problem für überbegeisterte Early Adopters sein, und die dritte ist mein persönlicher Ärger mit Haustieren. Abgesehen davon glaube ich nicht, dass die Verwendung von Redux bestimmte Nachteile mit sich bringt, die Flux vermeidet, und einige Leute sagen, dass es im Vergleich zu Flux sogar einige Nachteile hat.
Siehe auch meine Antwort zu den Vorteilen der Verwendung von Redux .
shallowEqual
Prüfung festgestellt, ob sich der Zustand geändert hat. Es kann jedoch durch deepEqual oder JSON.stringify ersetzt und verglichen werden. Letztendlich ist es etwas weniger Leistung - aber es sind reine Berechnungen ohne DOM - so schnell genug. Und auf jeden Fall ist das Rendern selbst dasselbeSowohl Redux als auch Flux erfordern eine beträchtliche Menge an Boilerplate-Code, um viele gängige Muster abzudecken, insbesondere solche, die das asynchrone Abrufen von Daten beinhalten. Die Redux-Dokumentation enthält bereits eine Handvoll Beispiele für die Reduzierung von Boilerplates: http://redux.js.org/docs/recipes/ReducingBoilerplate.html . Sie könnten alles, was Sie brauchen, aus einer Flux-Bibliothek wie Alt oder Fluxxor beziehen, aber Redux bevorzugt die Freiheit gegenüber Funktionen. Dies könnte für einige Entwickler ein Nachteil sein, da Redux bestimmte Annahmen über Ihren Status trifft, die versehentlich ignoriert werden könnten.
Die einzige Möglichkeit, Ihre Frage wirklich zu beantworten, besteht darin, Redux zu testen, wenn Sie können, möglicherweise in einem persönlichen Projekt. Redux entstand aufgrund des Bedarfs an besserer Entwicklererfahrung und ist auf funktionale Programmierung ausgerichtet. Wenn Sie mit Funktionskonzepten wie Reduzierern und Funktionszusammensetzung nicht vertraut sind, werden Sie möglicherweise verlangsamt, jedoch nur geringfügig. Der Vorteil bei der Berücksichtigung dieser Ideen im Datenfluss liegt in einfacheren Tests und Vorhersagbarkeit.
Haftungsausschluss: Ich bin von Flummox (einer beliebten Flux-Implementierung) zu Redux migriert, und die Vorteile überwiegen bei weitem alle Nachteile. Ich bevorzuge viel weniger Magie in meinem Code. Weniger Magie kostet etwas mehr Kesselplatte, aber es ist ein sehr geringer Preis.
quelle
Flussmittel und Redux . . .
Redux ist keine reine Flux-Implementierung, sondern definitiv von Flux inspiriert. Der größte Unterschied besteht darin, dass ein einzelner Speicher verwendet wird, der ein Statusobjekt umschließt, das den gesamten Status für Ihre Anwendung enthält. Anstatt Speicher wie in Flux zu erstellen, schreiben Sie Reduzierungsfunktionen, die einen einzelnen Objektstatus ändern. Dieses Objekt repräsentiert den gesamten Status in Ihrer App. In Redux erhalten Sie die aktuelle Aktion und den aktuellen Status und geben einen neuen Status zurück. Das bedeutet, dass die Aktionen sequentiell sind und der Zustand unveränderlich ist. Das bringt mich zu dem offensichtlichsten Nachteil in Redux (meiner Meinung nach).
Redux unterstützt ein unveränderliches Konzept.
Warum Unveränderlichkeit?
Dafür gibt es nur wenige Gründe:
1. Kohärenz - Der Status des Geschäfts wird immer von einem Reduzierer geändert, sodass leicht nachverfolgt werden kann, wer was ändert.
2. Leistung - Da Redux unveränderlich ist, muss es nur prüfen, ob der vorherige Status! == der aktuelle Status ist, und wenn ja, um zu rendern. Es ist nicht erforderlich, den Status jedes Mal für ein bestimmtes Rendering zu wiederholen.
3. Debugging - neue großartige Konzepte wie Time Travel Debugging und Hot Reloading .
UPDATE: Wenn das nicht überzeugend genug war, schauen Sie sich Lee Byrons exzellenten Vortrag über unveränderliche Benutzeroberflächen an .
Redux erfordert eine Entwicklerdisziplin durch die Codebasis / Bibliotheken, um diese Idee aufrechtzuerhalten. Sie müssen sicherstellen, dass Sie Bibliotheken auswählen und Code auf nicht veränderbare Weise schreiben.
Wenn Sie mehr über die unterschiedliche Implementierung von Flux-Konzepten erfahren möchten (und was für Ihre Anforderungen am besten geeignet ist), lesen Sie diesen nützlichen Vergleich.
Nachdem ich das gesagt habe, muss ich zugeben, dass in Redux die zukünftige Entwicklung von JS stattfinden wird (was das Schreiben dieser Zeilen betrifft).
quelle
Einer der größten Vorteile bei der Verwendung von Redux gegenüber den anderen Flux-Alternativen ist die Fähigkeit, Ihr Denken auf einen funktionaleren Ansatz auszurichten. Wenn Sie erst einmal verstanden haben, wie die Drähte miteinander verbunden sind, erkennen Sie die atemberaubende Eleganz und Einfachheit des Designs und können niemals mehr zurückkehren.
quelle
Ich bevorzuge die Verwendung von Redux, da es einen Speicher verwendet, der die Statusverwaltung im Vergleich zu Flux und auch Redux DevTools erheblich vereinfacht sehr hilfreiche Tools, mit denen Sie einiger nützlicher Daten sehen können, was Sie mit Ihrem Status tun, und die wirklich mit den React-Entwicklungstools übereinstimmen.
Außerdem hat Redux mehr Flexibilität bei der Verwendung mit anderen gängigen Frameworks wie Angular . Wie auch immer, mal sehen, wie sich Redux als Framework vorstellt.
Redux hat drei Prinzipien, die Redux sehr gut einführen können und die auch den Hauptunterschied zwischen Redux und Flux ausmachen.
Eine einzige Quelle der Wahrheit
Der Status ist schreibgeschützt
Änderungen werden mit reinen Funktionen vorgenommen
Weitere Informationen finden Sie hier
quelle
Redux erfordert Disziplin in Bezug auf Unveränderlichkeit. Ich kann ng-freeze empfehlen, um Sie über eine zufällige Zustandsmutation zu informieren.
quelle
Soweit ich weiß, ist Redux vom Fluss inspiriert. Flux ist eine Architektur wie MVC (Model View Controller). Facebook führt den Fluss aufgrund von Skalierbarkeitsproblemen bei der Verwendung von MVC ein. Flux ist also keine Implementierung, sondern nur ein Konzept. Eigentlich ist Redux die Implementierung von Flux.
quelle