这就是我如何解决它的,它不是最优雅的,需要在商店重新加载时注册回调,但它是有效的。
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 }
}