redux-persist出错:Store没有有效的reducer

鸡肉味*_*嘎嘣脆 6 reactjs redux 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

App.js

const mapStateToProps = (state) => ({
  logged: state.userInfo.isLogin
})
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到此错误消息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.

我猜联合减速器时有些事情是不正确的.但我不知道哪里出错了?

Dan*_*ane 9

redux-persist文档中:

import reducers from './reducers' // where reducers is a object of reducers
Run Code Online (Sandbox Code Playgroud)

第二个参数persistCombineReducers必须是reducer的一个对象.
你在reducer.js中的导出应该是:

export default {
  reducer: reducer
};
Run Code Online (Sandbox Code Playgroud)

进行更改并告知我是否已解决.