Редагувати 25 серпня 2019 р
Як зазначено в одному з коментарів. Оригінальний пакет редукційного зберігання переміщено в стек реакцій . Цей підхід досі зосереджений на впровадженні власного рішення щодо управління державою.
Оригінальна відповідь
Незважаючи на те, що надана відповідь була дійсною в певний момент, важливо зауважити, що оригінальний пакет редукційного сховища застарів та більше не підтримується ...
Оригінальний автор пакета redux-storage вирішив припинити проект і більше не підтримував його.
Тепер, якщо ви не хочете мати залежностей від інших пакунків, щоб уникнути подібних проблем у майбутньому, дуже легко створити власне рішення.
Все, що вам потрібно зробити, це:
1- Створіть функцію, яка повертає стан із, localStorage
а потім передає стан createStore
функції відновлення у другому параметрі, щоб гідратувати сховище
const store = createStore(appReducers, state);
2- Слухайте зміни штату і кожен раз, коли стан змінюється, зберігайте стан localStorage
store.subscribe(() => {
saveState(store.getState());
});
І все ... Я насправді використовую щось подібне у виробництві, але замість використання функцій я написав дуже простий клас, як показано нижче ...
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 {
}
};
}
}
а потім при завантаженні програми ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Сподіваюся, це комусь допоможе
Примітка щодо продуктивності
Якщо зміни стану дуже часті у вашій програмі, надто часто збереження в локальному сховищі може погіршити продуктивність програми, особливо якщо графік об’єкта стану для серіалізації / десеріалізації великий. У цих випадках ви можете захотіти брязкіт або задушити функцію , яка зберігає стан в LocalStorage використання RxJs
, lodash
або що - щось подібне.