[英]How to Save Page Name and URL in React to Redux store at each Load
[英]How to save Redux Store as a downloaded file and then load it back?
我有一個帶有項目概念的Web應用程序。 我正在將react
, react-redux
和react-persist
與localForage
用作持久目標。
我現在正在嘗試實現項目保存和項目加載功能,並且整個Redux狀態都用作項目文件。 項目文件應作為用戶下載文件保存到磁盤。 和/或任何雲文件存儲服務。
保存部分微不足道,只需將商店存儲起來,序列化為JSON並將其放到用戶那里進行下載即可。
加載有點棘手,我的ReactDOM.render
很平常。
const {store, persistor} = configureStore()
ReactDOM.render(
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<Router>
<Route path={`${process.env.PATH}/`} component={App} />
</Router>
</PersistGate>
</Provider>,
document.getElementById('app')
)
如果已經創建了商店,則configureStore()
查找並返回它,否則它將創建一個新商店。
對於加載過程,我在想這樣的事情
有沒有更好的方法,也許是我在文檔中錯過的redux
和redux-persist
內置的加載方法?
這就是我解決的方法,它不是最優雅的方法,需要在商店重新加載時注冊回調,但是它可以工作。
const createNewStore = (initialState = undefined) => {
const persistConfig = { key: 'root', storage: localForage }
store = createStore(
persistReducer(persistConfig, reducers),
initialState,
createMiddleware()
)
persistor = persistStore(store)
}
const loadState = (state) => {
createNewStore(state)
callbacks.forEach(callback => {
callback()
})
}
export const loadStore = (json) => {
return new Promise((resolve, reject) => {
let state
try {
state = JSON.parse(json)
} catch (err) {
return reject(err)
}
if (!persistor) {
return resolve(loadState(state))
}
persistor.purge().then(() => {
return resolve(loadState(state))
}).catch(() => {
return resolve(loadState(state))
})
})
}
const getStore = (storeReplaceCallback = null) => {
if (storeReplaceCallback) {
callbacks.push(storeReplaceCallback)
}
if (!store) {
createNewStore()
}
return { store, persistor }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.