Als Hinweis: Ich habe die Dokumente für Redux (auch Baobab) gelesen und einen angemessenen Anteil an Googeln und Testen durchgeführt.
Warum wird so dringend empfohlen, dass eine Redux-App nur einen Store hat?
Ich verstehe die Vor- und Nachteile eines Single-Store-Setups im Vergleich zu einem Multi-Store-Setup ( es gibt viele Fragen und Antworten zu SO zu diesem Thema ).
IMO, diese architektonische Entscheidung liegt bei den App-Entwicklern, basierend auf den Anforderungen ihrer Projekte. Warum wird es für Redux so dringend empfohlen, dass es fast obligatorisch klingt ( obwohl uns nichts davon abhält, mehrere Geschäfte zu eröffnen )?
BEARBEITEN: Feedback nach der Umstellung auf Single-Store
Nachdem ich einige Monate mit Redux an einem komplexen SPA gearbeitet habe, kann ich sagen, dass es eine Freude war, mit der Struktur eines einzelnen Geschäfts zu arbeiten.
Einige Punkte, die anderen helfen könnten zu verstehen, warum ein Geschäft im Vergleich zu vielen Geschäften in vielen, vielen Anwendungsfällen eine strittige Frage ist:
- Es ist zuverlässig : Wir verwenden Selektoren, um den App-Status zu durchsuchen und kontextbezogene Informationen zu erhalten. Wir wissen, dass sich alle benötigten Daten in einem einzigen Geschäft befinden. Es werden alle Fragen vermieden, wo staatliche Probleme liegen könnten.
- Es ist schnell : Unser Geschäft hat derzeit fast 100 Reduzierungen, wenn nicht mehr. Selbst bei dieser Zählung verarbeiten nur eine Handvoll Reduzierer Daten zu einem bestimmten Versand, die anderen geben nur den vorherigen Status zurück. Das Argument, dass ein riesiger / komplexer Laden ( Anzahl der Reduzierungen ) langsam ist, ist ziemlich umstritten. Zumindest haben wir von dort keine Leistungsprobleme gesehen.
- Debugging-freundlich : Dies ist zwar ein überzeugendes Argument für die Verwendung von Redux als Ganzes, es gilt jedoch auch für einzelne Geschäfte im Vergleich zu mehreren Geschäften. Wenn Sie eine App erstellen, müssen Sie Statusfehler haben ( Programmiererfehler ). Dies ist normal. Bei der PITA dauert das Debuggen dieser Fehler Stunden. Dank des einzelnen Geschäfts ( und des Redux-Loggers ) haben wir nie mehr als ein paar Minuten mit einem bestimmten Statusproblem verbracht.
ein paar Hinweise
Die wahre Herausforderung beim Aufbau Ihres Redux-Geschäfts besteht darin, zu entscheiden, wie es strukturiert werden soll. Erstens, weil das Ändern der Struktur auf der Straße nur ein großer Schmerz ist. Zweitens, weil es weitgehend bestimmt, wie Sie Ihre App-Daten für einen beliebigen Prozess verwenden und abfragen. Es gibt viele Vorschläge zur Strukturierung eines Geschäfts. In unserem Fall fanden wir Folgendes ideal:
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
Hoffentlich hilft dieses Feedback anderen.
EDIT 2 - hilfreiche Store-Tools
Für diejenigen unter Ihnen, die sich gefragt haben, wie sie ein einzelnes Geschäft "einfach" verwalten können, was schnell komplex werden kann. Es gibt Tools, mit denen Sie die strukturellen Abhängigkeiten / die Logik Ihres Geschäfts isolieren können.
Es gibt Normalizr, das Ihre Daten basierend auf einem Schema normalisiert. Es bietet dann eine Schnittstelle, über die Sie mit Ihren Daten arbeiten und andere Teile Ihrer Daten abrufen können id
, ähnlich wie bei einem Wörterbuch.
Da ich Normalizr damals nicht kannte, baute ich etwas in die gleiche Richtung. relational-json verwendet ein Schema und gibt eine tabellenbasierte Schnittstelle zurück ( ähnlich einer Datenbank ). Der Vorteil von relational-json besteht darin, dass Ihre Datenstruktur dynamisch auf andere Teile Ihrer Daten verweist (im Wesentlichen können Sie Ihre Daten wie normale JS-Objekte in jede Richtung durchlaufen ). Es ist nicht so ausgereift wie Normalizr, aber ich verwende es seit einigen Monaten erfolgreich in der Produktion.