Bearbeiten 25-Aug-2019
Wie in einem der Kommentare angegeben. Das ursprüngliche Redux-Speicherpaket wurde in den React-Stack verschoben . Dieser Ansatz konzentriert sich weiterhin auf die Implementierung Ihrer eigenen Zustandsverwaltungslösung.
Ursprüngliche Antwort
Obwohl die angegebene Antwort irgendwann gültig war, ist es wichtig zu beachten, dass das ursprüngliche Redux-Speicherpaket veraltet ist und nicht mehr gewartet wird ...
Der ursprüngliche Autor des Pakets redux-storage hat beschlossen, das Projekt zu verwerfen und nicht mehr zu warten.
Wenn Sie keine Abhängigkeiten von anderen Paketen haben möchten, um solche Probleme in Zukunft zu vermeiden, ist es sehr einfach, Ihre eigene Lösung zu entwickeln.
Alles was Sie tun müssen ist:
1- Erstellen Sie eine Funktion, die den Status von zurückgibt, localStorage
und übergeben Sie den Status dann an die createStore
Redux-Funktion im zweiten Parameter, um den Speicher mit Feuchtigkeit zu versorgen
const store = createStore(appReducers, state);
2- Achten Sie auf Statusänderungen und speichern Sie den Status jedes Mal, wenn sich der Status ändert localStorage
store.subscribe(() => {
saveState(store.getState());
});
Und das war's ... Ich verwende tatsächlich etwas Ähnliches in der Produktion, aber anstatt Funktionen zu verwenden, habe ich eine sehr einfache Klasse wie unten geschrieben ...
class StateLoader {
loadState() {
try {
let serializedState = localStorage.getItem("http://contoso.com:state");
if (serializedState === null) {
return this.initializeState();
}
return JSON.parse(serializedState);
}
catch (err) {
return this.initializeState();
}
}
saveState(state) {
try {
let serializedState = JSON.stringify(state);
localStorage.setItem("http://contoso.com:state", serializedState);
}
catch (err) {
}
}
initializeState() {
return {
}
};
}
}
und dann beim Bootstrapping Ihrer App ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Hoffe es hilft jemandem
Leistungshinweis
Wenn Statusänderungen in Ihrer Anwendung sehr häufig sind, kann das zu häufige Speichern im lokalen Speicher die Leistung Ihrer Anwendung beeinträchtigen, insbesondere wenn das zu serialisierende / deserialisierende Statusobjektdiagramm groß ist. In diesen Fällen möchten Sie möglicherweise die Funktion, mit der der Status in localStorage gespeichert wird RxJs
, lodash
oder etwas Ähnliches entprellen oder drosseln .