Editar 25-ago-2019
Como se indica en uno de los comentarios. El paquete original de redux-storage se ha movido a react-stack . Este enfoque aún se enfoca en implementar su propia solución de administración de estado.
Respuesta original
Si bien la respuesta proporcionada fue válida en algún momento, es importante notar que el paquete original redux-storage ha quedado obsoleto y ya no se mantiene ...
El autor original del paquete redux-storage ha decidido desaprobar el proyecto y dejar de mantenerlo.
Ahora bien, si no desea tener dependencias en otros paquetes para evitar problemas como estos en el futuro, es muy fácil lanzar su propia solución.
Todo lo que necesitas hacer es:
1- Cree una función que devuelva el estado desde localStorage
y luego pase el estado a la función createStore
's redux en el segundo parámetro para hidratar la tienda
const store = createStore(appReducers, state);
2- Escuche los cambios de estado y cada vez que cambie el estado, guarde el estado para localStorage
store.subscribe(() => {
saveState(store.getState());
});
Y eso es todo ... De hecho, uso algo similar en producción, pero en lugar de usar funciones, escribí una clase muy simple como la siguiente ...
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 {
}
};
}
}
y luego al arrancar su aplicación ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Espero que ayude a alguien
Nota de rendimiento
Si los cambios de estado son muy frecuentes en su aplicación, guardar en el almacenamiento local con demasiada frecuencia podría dañar el rendimiento de su aplicación, especialmente si el gráfico de objetos de estado para serializar / deserializar es grande. Para estos casos, es posible que desee eliminar el rebote o acelerar la función que guarda el estado en localStorage usando RxJs
, lodash
o algo similar.