マルチステップフォームアプリケーションを使用していますが、redux状態を保存して更新後に再生する方法について頭を悩ませていますか?アプリで戻る/進むは期待どおりに機能しますが、ブラウザーを更新すると、以前の状態は空になります。理想的には、後で再生できるように、パスに関連するセッションストレージに以前の状態を保存できるようにしたいのですが、どうすれば簡単にできるかわかりません。誰かがこのようなことをして、いくつかのポインターを提供できますか?ありがとう。
複数ページのコンテキスト内で単一ページのアプリフレームワークを使用しようとしているようです。 2つのプレイをより良くするために、localStorage
との間で状態を同期する独自のミドルウェアを作成して、更新/ページナビゲーション後に状態が失われていないように見えるアプリを作成することができます。
localStorageLoad
)およびlocalStorageDump
関数作成の終了(createStoreWithMiddleware
)(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
はINIT
アクションを処理し、何らかの種類のSET_STATE
アクションをディスパッチします。これには、以前に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);
}
次に、状態をそのペイロードに置き換えるリデューサーを追加して、以前と同じようにアプリを効果的に再起動します。
localStorageDump
ミドルウェアが必要です。このミドルウェアは、各縮小状態オブジェクトをlocalStorage
に保存します。このようなもの:// middleware/localStorageDump.js
export default store => next => action => {
const state = store.getState();
localStorage.setItem('YOUR_APP_NAME', JSON.stringify(state));
next(action);
}
ただのアイデア、実際に試していない。それがあなたが解決に向けて始めるのを助けることを願っています。
リフレッシュ時に状態を保存することはできません。これは正常です。通常、これらはCookieまたはWebストレージに保存します。
戻ってきた:
Form
コンポーネントをマウントするとき、componentWillMount
メソッドを使用してlocalstorage
およびdispatch
をリデューサーに読み取りますReduxを使用してフォームデータを保存する場合、localstorageのプロパティをディスパッチします。
Form
コンポーネント内のlocalstorageを読み取らない場合、初期値を設定します。
お役に立てれば !