Setzen Sie den Status mit Redux-Toolkit auf den Anfangszustand zurück
Lesezeit: 5 Minuten
Zireael
Ich muss den aktuellen Zustand auf den Ausgangszustand zurücksetzen. Aber alle meine Versuche waren erfolglos. Wie kann ich das mit dem Redux-Toolkit machen?
const showOnReviewSlice = createSlice({
name: 'showOnReview',
initialState: {
returned: [],
},
reducers: {
reset(state) {
//here I need to reset state of current slice
},
},
});
Für zukünftige Leser: Mit redux-toolkit den kompletten Zustand auf den Anfangszustand zurücksetzen.
ja es funktioniert. Richtig ist auch reset() {return initialState} oder reset:() => initialState
– Zireael
25. Dezember 2019 um 9:06 Uhr
Ich dachte, einfach einstellen state = initialState würde ausreichen, da wir in anderen Beispielen nur mutieren müssen state. Leider erforderte das Zurücksetzen des Staates einen anderen Ansatz :/
– Dorklord
9. Juni 2020 um 8:38
Ich muss zugeben, dass sogar das Redux-Toolkit großartig ist, es ist ein bisschen Unveränderlichkeit und dunkle Magie 😀 Übrigens return { ...initialState } funktioniert auch…
– Baterka
10. Dezember 2020 um 23:36 Uhr
@Dorklord state = initialState funktioniert nicht, weil Sie die Referenz ändern und Redux Toolkit das nicht wissen kann, da es die alte Referenz beibehält. Du musst entweder das Original mutieren stateODERzurückkehren neues Objekt. @nachtigall @fullStackChris
– Qwertz
5. Mai 2022 um 23:35 Uhr
@Baterka return { ...initialState } ist unnötig und vielleicht kommen Sie vom traditionellen Redux, wo Mutation verboten war. Hier return initialState Und return { ...initialState } sind gleichwertig.
– Qwertz
5. Mai 2022 um 23:37 Uhr
schlimmstes
Das hat bei mir funktioniert (Mitte/Ende 2020). Formatiert mit Ihrem Codekontext als Beispiel.
Dieser Code funktioniert, obwohl wir in allen Reduzierern repetitiven Code hinzufügen müssen. Ich wünschte, es gäbe einen eleganteren Weg, dies ohne Duplizierung des Codes zu erreichen
– Dattatreya Kugve
30. September 2022 um 5:37 Uhr
Danke! Vorschläge zur Entfernung der Wiederholung sind willkommen
– Blut
10. Okt. 2022 um 14:13 Uhr
Nur so hat es im Jahr 2023 funktioniert. Danke.
– Ujith Nimantha
30. Januar um 7:48 Uhr
Danke @Blee. Ich benötige bitte eine Erläuterung, wie der Versand erfolgen soll. Da haben wir den Respekt All on all Slices. Wie kombiniere ich alles vor dem Versand?
– SwiftDev
4. März um 17:19 Uhr
Ersetzen state mit initialState direkt getan nicht Arbeit für mich (Mitte 2020). Letztendlich habe ich es geschafft, jede Eigenschaft zu kopieren Object.assign(). Das hat funktioniert:
Nachdem Sie den Abmelde-Thunk gesendet haben, können Sie auch den Browser aktualisieren, damit er den Benutzer automatisch zur Anmeldeseite umleitet.
function MyReactComponent() {
const dispatch = useDispatch()
function myLogoutOnClickHandler() {
dispatch(logout())
window.location = window.location;
}
...
}
In meinem Fall wird, wie in der vorherigen Antwort, Mitte 2021 nur der Anfangszustand festgelegt ARBEITE NICHT, auch wenn Sie den Toolkit-Adapter wie folgt verwenden:
reducers: {
// Other reducers
state = tasksAdapter.getInitialState({
status: 'idle',
error: null,
current: null
})
}
},
stattdessen sollten Sie verwenden Object.assign()vermute, dass es mit dem internen Verhalten der Immer-Bibliothek zusammenhängt
jjswift
Versuche dies. In meinem Fall wollte ich zurückkehren alle Slices auf initialState wenn eine bestimmte Aktion ausgelöst wird.
Beim Erstellen unseres Shops speichern wir eine Kopie des initialState in der Middleware:
import { Middleware } from '@reduxjs/toolkit';
export const resetDataMiddleware: Middleware =
({ getState }) =>
(next) => {
// "Caching" our initial app state
const initialAppState = getState();
return (action) => {
// Let's add the condition that if the action is of
// type resetData, then add our cached state to its payload
if (action.type === 'resetData') {
const actionWithInitialAppState = {
...action,
payload: initialAppState,
};
return next(actionWithInitialAppState);
}
return next(action);
};
};
Fast fertig! Jetzt ändern wir unseren Root-Reduzierer ein wenig, indem wir einen Wrapper hinzufügen, der den Aktionstyp überprüft und zurückgibt, wenn er gleich „resetData“ ist combinedReducers mit unserer Ausgangszustanddie in der Nutzlast enthalten sein wird.
Für zukünftige Leser: Mit redux-toolkit den kompletten Zustand auf den Anfangszustand zurücksetzen.
– Ajeet Shah
23. Mai 2020 um 20:04
@AjeetShah perfekte Lösung, danke fürs Teilen.
– Guilherme Samuel
2. März 2021 um 14:05 Uhr