redux-persist получил ошибку: в магазине нет допустимого редуктора

У меня ошибка при использовании redux-persist. Я смог найти несколько документов о redux-persist v5. И я просто следую официальному примеру использования. Но меня это смущает. Прежде чем использовать redux-persist, я могу правильно получить состояние из хранилища. Но я хочу, чтобы состояние входа оставалось локальным. Поэтому я пытаюсь использовать redux-persist. Потом возникли проблемы. Вот мой код:

reducer.js

const initialState = {
  isLogin: false,
  uname: "",
}

const userReducer = (state = initialState, action) => {
  switch(action.type) {
    case 'DO_LOGIN':
      return Object.assign({}, state, {
        isLogin: true,
        uname: action.payload.username
      })
    default:
      return state
  }
}

const reducers = combineReducers({
  userInfo: userReducer
})

export default reducers

store.js

import thunk from 'redux-thunk'
import { createLogger } from 'redux-logger'
import { createStore, applyMiddleware, compose } from 'redux'
import { persistStore, persistCombineReducers } from 'redux-persist'
import storage from 'redux-persist/es/storage'
import reducers from '../reducers'

const loggerMiddleware = createLogger()

const middleware = [thunk, loggerMiddleware]

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose

const configureStore = composeEnhancers(
  applyMiddleware(...middleware),
)(createStore)

const config = {
  key: 'root',
  version: 1,
  storage,
}

const combinedReducer = persistCombineReducers(config, reducers)

const createAppStore = () => {
  let store = configureStore(combinedReducer)
  let persistor = persistStore(store)

  return { persistor, store }
}

export default createAppStore

App.js

const mapStateToProps = (state) => ({
  logged: state.userInfo.isLogin
})

Когда я запускаю этот код, я получаю это сообщение об ошибке TypeError: Cannot read property 'isLogin' of undefined И это сообщение об ошибке в консоли Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.

Я думаю, что что-то не так при объединении редукторов. Но я понятия не имею, где не так?


person 鸡肉味嘎嘣脆    schedule 02.11.2017    source источник


Ответы (1)


В redux-persist документах:

import reducers from './reducers' // where reducers is a object of reducers

второй аргумент persistCombineReducers должен быть объектом редукторов.
Экспорт в yout reducer.js должен быть:

export default {
  reducer: reducer
};

Внесите изменения и дайте мне знать, если проблема решена.

person Dane    schedule 02.11.2017
comment
вы можете обновить вопрос новым кодом? Не могли бы вы попробовать мой обновленный ответ - person Dane; 02.11.2017
comment
Извини, я тебя понял. Я обновил свой код, и пусть reducer.js экспортирует объект. Оно работает. Большое тебе спасибо. - person 鸡肉味嘎嘣脆; 02.11.2017