1

我正在使用 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);
    });
}

在状态更改之后(还验证了刷新操作触发)。我已经尝试了一切,我非常感谢任何关于此事的建议。提前致谢。

4

0 回答 0