Redux na prática
import {
legacy_createStore as createStore,
applyMiddleware,
compose,
} from "redux";
import thunk from "redux-thunk";
import { reducers } from "../reducers";
function saveToLocalStorage(store) {
try {
const serializedStore = JSON.stringify(store);
window.localStorage.setItem("store", serializedStore);
} catch (e) {
console.log(e);
}
}
function loadFromLocalStorage() {
try {
const serializedStore = window.localStorage.getItem("store");
if (serializedStore === null) return undefined;
return JSON.parse(serializedStore);
} catch (e) {
console.log(e);
return undefined;
}
}
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const persistedState = loadFromLocalStorage();
const store = createStore(
reducers,
persistedState,
composeEnhancers(applyMiddleware(thunk))
);
store.subscribe(() => saveToLocalStorage(store.getState()));
export default store;
Este é um código em JavaScript que utiliza a biblioteca Redux para gerenciar o estado da aplicação. O objetivo do código é criar um objeto de armazenamento (store) que pode ser utilizado em toda a aplicação, com o uso de middleware para adicionar funcionalidades ao Redux e a persistência do estado da aplicação no armazenamento local do navegador. Aqui está uma explicação mais detalhada do que o código está fazendo:
As importações incluem o método createStore
, applyMiddleware
, e compose
da biblioteca Redux, bem como o middleware thunk
e os redutores reducers
do aplicativo.
As funções saveToLocalStorage
e loadFromLocalStorage
são definidas para persistir o estado da aplicação no armazenamento local do navegador. A função saveToLocalStorage
converte o estado em JSON e armazena-o no armazenamento local do navegador com a chave "store", enquanto a função loadFromLocalStorage
recupera o estado do armazenamento local com a chave "store" e converte-o em um objeto JavaScript.
A constante composeEnhancers
é definida para permitir a utilização da ferramenta de desenvolvedor do Redux. Ela utiliza o window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
, se disponível, ou o compose
padrão da biblioteca Redux.
A constante persistedState
é definida como o estado recuperado do armazenamento local do navegador com a função loadFromLocalStorage
.
A constante store
é definida utilizando o método createStore
do Redux, passando os redutores, o estado persistido e o middleware thunk
. O composeEnhancers
é utilizado para incluir a ferramenta de desenvolvedor do Redux, se estiver disponível. Além disso, é adicionado um listener
no armazenamento para chamar a função saveToLocalStorage
sempre que o estado for atualizado.
Por fim, o store
é exportado como o valor padrão do módulo. No geral, este código cria um objeto de armazenamento Redux com funcionalidades adicionais por meio do middleware thunk
e da ferramenta de desenvolvedor do Redux, enquanto persiste o estado da aplicação no armazenamento local do navegador para permitir que os usuários recuperem seu estado mesmo após recarregar a página.