2017-11-02 383 views
5

Redux-persist kullanırken bir hata oluştu. Redux-persist v5 hakkında birkaç belge bulabilirim. Ve sadece resmi kullanım örneğini takip ediyorum. Ama bunun hakkında kafam karıştı. Redux-persist kullanmaya başlamadan önce, durumu doğru bir şekilde mağazadan alabilirim. Ancak giriş durumunu yerel olarak tutmak istiyorum. Bu yüzden redux-persist kullanmaya çalışıyorum. Sonra bazı problemlerim var. İşte benim kodudur:redux-persist hatası var: Mağazada geçerli bir redresör yok

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 
}) 

Ben bu hata mesajı var bu kodu çalıştırdığınızda TypeError: Cannot read property 'isLogin' of undefined Ve konsoldaki bu hata iletisi Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.

Sanırım redüktörleri birleştirirken bir şey doğru değil. Ama neyin yanlış olduğu hakkında hiçbir fikrim yok. redux-persist docs yılında

cevap

8

:

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

persistCombineReducers için 2 argüman REDÜKTÖRLE bir nesne olmalıdır.
yout reducer.js ihracat olmalıdır:

export default { 
    reducer: reducer 
}; 

değişiklikleri yapın ve çözüldü varsa bana bildirin.

+0

Ne dediysen onu yaptım. Ama aynı hata. –

+1

soruyu yeni kod ile güncelleyebilir misiniz? Benim güncellenmiş cevabımı – Dane

+0

denediniz mi lütfen Üzgünüz, şimdi anladım. Kodumu güncelledim, reducer.js bir nesneyi dışa aktarmasına izin ver. İşe yarıyor. Çok teşekkür ederim. –