如何解决:TypeError:inputState.withMutations不是函数。备用存储

时间:2019-11-13 02:47:08

标签: redux redux-immutable

我正在执行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 ;
}

0 个答案:

没有答案