2016-06-11 8 views
12

Ich möchte sicherstellen, dass ich Redux richtig verstanden habe. Mein Verständnis ist, dass es den vollständigen Zustand einer Anwendung (einschließlich aller Subsysteme) wie Modelle aller Komponenten und Cache der abgerufenen Daten und der vom Benutzer erzeugten Daten speichert. Bedeutet das, dass ich Service nie benutzen sollte, um Zustand einer Komponente durch seine Modell-ID zu laden/zu speichern?Redux vs Dienste in Angular 2

Ich mache eine Quiz-Anwendung, die von Komponenten wie Quiz bestehen, Kategorie, Frage und Wahl. Gegenwärtig ruft jede Komponente die Web-API zum Abrufen von Daten auf und unterhält ihren eigenen Zustand selbst oder mit Hilfe eines Dienstes, der alles nach ID-Feldern verfolgt.

I gewidmet Dienst namens AnswerService den Zustand ausgewählter Entscheidungen zu erhalten, wobei jede Wahl Komponente holt es Zustand ist, wenn gerendert.

Wird bei der Migration nach Redux alles in den Speicher verschoben, und praktisch alle Dienste werden zustandslos ausgeführt und direkt an den Speicher gesendet, bzw. werden alle Komponentenmodelle aus dem Speicher abonniert?

Antwort

0

Danke für Ihre Frage. Ich stehe vor dem gleichen Dilemma. Die Art und Weise, wie ich mich jetzt selbst geantwortet habe, ist, dass ich noch testbare Dienste haben werde, um die Zustandsänderungsoperationen einzukapseln, die die "redux" -Funktion ausführt. Meiner Meinung nach ist diese Redux-Funktion mit einer riesigen if-Anweisung, die du in einfachen redux-Beispielen siehst, nur ein Anfang ... Ich denke, niemand wird das wirklich in einer großen App codieren .... würde ich aber sagen , dass es eine gute Idee ist, diesen reduktiven Intermediär zu haben, der jedes State-Changing-Ereignis an den entsprechenden Dienst abfängt und ausliefert. Nicht sicher, ob wir auch wollen, dass das Read-Only im Service gekapselt wird ... vielleicht nicht ... aber das wäre eine andere Diskussion.

1

„Does zu Redux Migration bedeutet all dies wird speichern bewegt werden“

Nr
Wenn Sie NGRX verwenden Sie dann den besten Weg zu handhaben würde mit NGRX/Wirkungen. Dies ist eine begleitende Bibliothek, die "der Ort sein soll, an dem Sie Ihren asynchronen Code ablegen können" oder anders gesagt, der Ort, an dem Sie Nebenwirkungen machen können. Wenn also die Komponente einige neue Daten benötigt, würde sie eine "GET_DATA" -Aktion auslösen und dies würde als ngrx @Effect behandelt werden. Innerhalb Ihres Effekts können Sie Ihren benutzerdefinierten Dienst verwenden, um die Daten aufzurufen und abzurufen (so dass Ihre asynchronen Dienste wahrscheinlich in Ordnung sind und möglicherweise nur ein wenig optimiert werden müssen). Dann wird eine Aktion, die die neuen Daten enthält, an den Reduzierer zurückgegeben, der den Status mit den neuen Daten aktualisiert. Ihre Komponente hat die gesamte Zeit subskribiert. Wenn der Status vom Reduzierer aktualisiert wird, kennt die Komponente diese Änderung und kann ihren eigenen lokalen Status automatisch aktualisieren.