我正在使用 redux-persist 并将整个状态树存储为不可变映射,如下面的 store.js 文件代码所示。
import {persistReducer, persistStore} from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel1 from 'redux-persist/lib/stateReconciler/autoMergeLevel1'
import { Record } from 'immutable';
import immutableTransform from 'redux-persist-transform-immutable';
const history = createHistory();
const middlewares = [thunk, sagaMiddleware, routeMiddleware, ReduxPromise];
// some imports omitted in the interest of brevity.
let persistor;
const MyRecord = Record({
App : {},
Auth : {},
Box : {},
Calendar : {},
Cards : {},
Contacts : {},
Course : {},
DynamicChartComponent : {},
Ecommerce : {},
LanguageSwitcher : {},
Mails : {},
Notes : {},
ThemeSwitcher : {},
Todos : {},
User : {},
YoutubeSearch : {},
githubSearch : {}
}, 'MyRecord')
const persistConfig = {
transforms: [immutableTransform({records: [MyRecord]})],
key: 'root',
storage,
stateReconciler: autoMergeLevel1
}
const persistedReducer = persistReducer(persistConfig, combineReducers({
...reducers,
router: routerReducer
}));
const loggerMiddleware = createLogger({
predicate: () => process.env.NODE_ENV === 'development',
});
middlewares.push(loggerMiddleware);
export default () => {
let store = createStore(persistedReducer, compose(applyMiddleware(...middlewares), reduxReset()))
sagaMiddleware.run(rootSaga);
persistor = persistStore(store);
return { store, history, persistor }
}
export function getPersistor() {
return persistor;
}
我的问题是,即使我对状态树进行了更改(我已经确认,实际上确实发生了,使用 redux 记录器),尽管我调用了这些更改,但在刷新时我的应用程序中并未显示这些更改persistor.flush() 像这样:
export function* materialUpdate() {
yield takeEvery(actions.COURSE_MAT_UPDATE, function*() {
let secs = 2;
while (secs > 0) {
yield call(delay, 1000);
secs--;
}
// const flushData = persistor => persistor.flush();
// const persistor = yield call(getPersistor);
yield put(getPersistor().flush);
});
}
在状态更改之后(还验证了刷新操作触发)。我已经尝试了一切,我非常感谢任何关于此事的建议。提前致谢。