Редактировать 25 августа 2019 г.
Как сказано в одном из комментариев. Исходный пакет redux-storage перемещен в response-stack . Этот подход по-прежнему ориентирован на реализацию вашего собственного решения для управления состоянием.
Оригинальный ответ
Хотя предоставленный ответ был действителен в какой-то момент, важно отметить, что исходный пакет redux-storage устарел и больше не поддерживается ...
Первоначальный автор пакета redux-storage решил отказаться от проекта и больше не поддерживается.
Теперь, если вы не хотите иметь зависимости от других пакетов, чтобы избежать подобных проблем в будущем, очень легко развернуть собственное решение.
Все, что вам нужно сделать, это:
1- Создайте функцию, которая возвращает состояние из, localStorage
а затем передает состояние createStore
функции redux во втором параметре, чтобы гидратировать хранилище
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
или что - то подобное.