J'ai une application de formulaire en plusieurs étapes et j'ai du mal à comprendre comment je peux enregistrer mon état redux et le rejouer après une actualisation par exemple? Revenir en arrière/avancer dans l'application fonctionne comme prévu, mais après une actualisation du navigateur, mon état précédent est vide. Idéalement, j'aimerais pouvoir sauvegarder l'état antérieur dans le stockage de session relatif à un chemin, afin que je puisse rejouer plus tard, mais je ne vois pas comment je peux le faire facilement. Quelqu'un at-il fait quelque chose comme ça et peut-il fournir des conseils? Merci.
Il semble que vous essayez d'utiliser un framework d'application à page unique dans un contexte de plusieurs pages. Pour rendre les deux plus agréables, vous pouvez envisager de créer votre propre middleware qui synchronise l'état vers et depuis localStorage
pour créer une application qui semble n'avoir perdu aucun état après une navigation d'actualisation/page.
localStorageLoad
) et la fin (localStorageDump
) de la création de la fonction createStoreWithMiddleware
(juste avant redux-logger
):// store/configureStore.js
const createStoreWithMiddleware = applyMiddleware(
localStorageLoad, thunk, promise, localStorageDump, logger
)(createStore);
// index.js
const store = configureStore();
store.dispatch({ type: 'INIT' });
ReactDOM.render(<App />, document.getElementById('root'));
localStorageLoad
gérerait l'action INIT
et enverrait une sorte de SET_STATE
action, qui contiendrait une charge utile avec l'état précédemment enregistré dans localStorage
.
// middleware/localStorageLoad.js
export default store => next => action => {
const { type } = action;
if (type === 'INIT') {
try {
const storedState = JSON.parse(
localStorage.getItem('YOUR_APP_NAME')
);
if (storedState) {
store.dispatch({
type: 'RESET_STATE',
payload: storedState
});
}
return;
} catch (e) {
// Unable to load or parse stored state, proceed as usual
}
}
next(action);
}
Ensuite, ajoutez un réducteur qui remplace l'état par cette charge utile, en redémarrant efficacement l'application comme elle l'était auparavant.
localStorageDump
qui se trouve à la fin de la chaîne qui enregistre chaque objet à état réduit dans localStorage
. Quelque chose comme ça:// middleware/localStorageDump.js
export default store => next => action => {
const state = store.getState();
localStorage.setItem('YOUR_APP_NAME', JSON.stringify(state));
next(action);
}
Juste une idée, je ne l'ai pas encore essayée. J'espère que cela vous aidera à démarrer vers une solution.
Vous ne pouvez pas stocker l'état lors de l'actualisation, c'est normal. En règle générale, vous les stockez dans des cookies ou un stockage Web.
Redux:
Form
, utilisez la méthode componentWillMount
pour lire les données localstorage
et dispatch
dans un réducteurSi vous utilisez redux pour stocker des données de formulaire, distribuez les propriétés de localstorage.
Sinon, lisez le stockage local à l'intérieur du composant Form
et définissez les valeurs initiales.
J'espère que cela t'aides !