Editar 25 de agosto de 2019
Conforme afirmado em um dos comentários. O pacote redux-storage original foi movido para react-stack . Essa abordagem ainda se concentra na implementação de sua própria solução de gerenciamento de estado.
Resposta Original
Embora a resposta fornecida seja válida em algum ponto, é importante notar que o pacote redux-storage original foi descontinuado e não está mais sendo mantido ...
O autor original do pacote redux-storage decidiu descontinuar o projeto e não o mantém mais.
Agora, se você não quiser depender de outros pacotes para evitar problemas como esses no futuro, é muito fácil lançar sua própria solução.
Tudo que você precisa fazer é:
1- Crie uma função que retorne o estado de localStorage
e então passe o estado para a createStore
função redux do segundo parâmetro para hidratar a loja
const store = createStore(appReducers, state);
2- Ouça as mudanças de estado e toda vez que o estado mudar, salve o estado para localStorage
store.subscribe(() => {
saveState(store.getState());
});
E é isso ... Na verdade, eu uso algo semelhante na produção, mas em vez de usar funções, escrevi uma classe muito simples como abaixo ...
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 {
}
};
}
}
e então ao inicializar seu aplicativo ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Espero que ajude alguém
Nota de Desempenho
Se as alterações de estado forem muito frequentes em seu aplicativo, salvar no armazenamento local com muita frequência pode prejudicar o desempenho do aplicativo, especialmente se o gráfico do objeto de estado para serializar / desserializar for grande. Para esses casos, você pode querer debounce ou estrangular a função que salva estado para localStorage usando RxJs
, lodash
ou algo similar.