我正在执行redux-storage的实现,并且显示了下一个问题:无法加载先前的状态TypeError:inputState.withMutations不是函数。 在一些论坛上阅读时,我意识到要更改redux的combineReducer-immutable为redux的CombineReducer,有效地load(store)返回已加载状态。但是我需要使用redux不可变
的CombineReducer这是我的减速器的代码:
import { reducer as form } from 'redux-form/immutable';
import { combineReducers } from 'redux-immutable';
//import { combineReducers } from 'redux'
import { connectRouter } from 'connected-react-router/immutable';
import history from 'utils/history';
import * as storage from 'redux-storage';
// Global Reducers
import languageProviderReducer from 'containers/LanguageProvider/reducer';
import authReducer from './modules/authReducer';
import uiReducer from './modules/uiReducer';
import initval from './modules/initFormReducer';
/**
* Creates the main reducer with the dynamically injected ones
*/
export default function createReducer(injectedReducers = {}) {
const rootReducer = storage.reducer(combineReducers({
form,
ui: uiReducer,
initval,
authReducer,
router: connectRouter(history),
...injectedReducers,
}));
// Wrap the root reducer and return a new root reducer with router state
const mergeWithRouterState = connectRouter(history);
return mergeWithRouterState(rootReducer);
}
这是我的configureStore的代码:
import { createStore, applyMiddleware, compose } from 'redux';
import * as storage from 'redux-storage';
import { fromJS } from 'immutable';
import { routerMiddleware } from 'connected-react-router/immutable';
import createSagaMiddleware from 'redux-saga';
import createReducer from './reducers';
import sagas from '../utils/sagas';
import createEngine from 'redux-storage-engine-localstorage';
import {loadState, saveState} from '../storage/index'
const sagaMiddleware = createSagaMiddleware();
export default function configureStore(initialState ={}, history) {
const engine = createEngine('my-save-key');
const middleware = storage.createMiddleware(engine);
const middlewares = [sagaMiddleware, routerMiddleware(history), middleware];
const enhancers = [applyMiddleware(...middlewares)];
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle, indent */
const composeEnhancers = process.env.NODE_ENV !== 'production'
&& typeof window === 'object'
&& window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
// Prevent recomputing reducers for `replaceReducer`
shouldHotReload: false,
})
: compose;
/* eslint-enable */
const store = createStore(
createReducer(),
fromJS(initialState),
composeEnhancers(...enhancers),
);
// Extensions
sagaMiddleware.run(sagas);
store.injectedReducers = {}; // Reducer registry
store.injectedSagas = {}; // Saga registry
// Make reducers hot reloadable, see http://mxs.is/googmo
/* istanbul ignore next */
const load = storage.createLoader(engine);
load(store)
.then((newState) => console.log('Loaded state:', newState))
.catch((err) => console.log('Failed to load previous state', err));
return store ;
}