Ich verwende Angular 2 mit ngrx / store . Ich möchte die gesamten Store-Status zurücksetzen, wenn der Benutzer USER_LOGOUT
versendet.
Ich lese die Antwort von Dan Abramov von Wie man das zurücksetzt Status eines Redux-Speichers? , aber ich habe nicht herausgefunden, wie rootReducer
richtig geschrieben wird und wo es bei Verwendung von ngrx / store abgelegt wird.
Oder gibt es eine andere Möglichkeit, dies in ngrx / store zu behandeln?
%Vor%Diese Antwort ist spezifisch für ngrx Version 2. Die Frage hat eine andere, aktuellere Antwort , die erklärt, wie das Gleiche funktioniert mit ngrx Version 4 gemacht werden.
compose
erstellt den ngrx Wurzelreduzierer .
Die Argumente, die an compose
übergeben werden, sind Funktionen, die einen Reduzierer zurückgeben - der aus dem Reduzierer zusammengesetzt ist und selbst als Argument übergeben wird. Sie können das Zurücksetzen Ihres Geschäfts wie folgt zusammenstellen:
Beachten Sie, dass dadurch der gesamte Status des Geschäfts zurückgesetzt wird - einschließlich router
. Wenn Sie das nicht möchten, können Sie das Beispiel optimieren.
Mit Einführung von NgModule
hat sich das Bootstrapping geändert, aber Sie übergeben den kompilierten Reducer immer noch an provideStore
:
In ngrx / store 4.x kann dies mit erreicht werden Metareducers . Wie ich es verstehe, passieren alle Aktionen die Metareducer, bevor sie an die Feature Reducer übergeben werden. Dies gibt uns die Möglichkeit, den Zustand zuerst zu ändern / zurückzusetzen.
Hier ist ein Beispiel.
Dies ist meine Metareducer-Funktion: Falls die Aktion vom Typ LOGOUT ist, wird der Status neu initialisiert.
%Vor%Im Folgenden sehen Sie, wie der Metareducer zusammen mit den Funktionsreduzierern konfiguriert wird. Sollten mehr als 1 Metareducer vorhanden sein, werden diese von rechts nach links ausgewertet.
%Vor%Schließlich habe ich auch einen @ -Effekt, durch den ich zur Anmeldeseite navigiere
%Vor%Mit @ ngrx / store ":" ^ 4.0.3 "ist das etwas anders, weil es kleine Änderungen gibt, also sieht mein 'klarer Zustand' so aus
%Vor%und
%Vor%Dies ist nicht wirklich eine Antwort, aber die Kommentare lassen mich nicht richtig formatieren. Um hinzuzufügen, was Cartant gesagt hat, wenn Sie Ihre Typen wie folgt einrichten:
%Vor% Es ist die lange Beschreibung, die Sie verwenden sollten. Auch wenn Sie Ihren Root Reducer rootReducer
anstatt nur reducer
nennen, würden Sie das auch ändern. Folgendes ist ein bearbeitetes Beispiel:
(Ich habe diese Funktion in meinem Wurzelreduzierer gelassen)
%Vor%Tags und Links angular typescript ngrx