2017-11-02 54 views
5

Wystąpił błąd podczas używania redux-persist. Mogłem znaleźć kilka dokumentów na temat redux-persist v5. I po prostu podążam za oficjalnym przykładem użycia. Ale jestem zdezorientowany. Zanim użyję redux-persist, mogę poprawnie pobrać stan ze sklepu. Ale chcę zachować stan logowania w lokalnym. Więc próbuję użyć redux-persist. Potem miałem problemy. Tu jest mój kodu:redux-persist got error: Store nie ma ważnego reduktora

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

Kiedy uruchomić ten kod mam ten komunikat o błędzie TypeError: Cannot read property 'isLogin' of undefined Ten komunikat o błędzie w konsoli Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.

Zgaduję, że coś jest nie tak, gdy łączę reduktory. Ale nie mam pojęcia, gdzie jest źle?

Odpowiedz

8

W redux-persist docs:

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

2. Argument persistCombineReducers musi być przedmiotem reduktorów.
Eksport w yout reducer.js powinno być:

export default { 
    reducer: reducer 
}; 

Wprowadź zmiany i dać mi znać, jeśli to rozwiązać.

+0

Zrobiłem to, co powiedziałeś. Ale to ten sam błąd. –

+1

Czy możesz zaktualizować pytanie nowym kodem? Czy możesz spróbować mojej zaktualizowanej odpowiedzi – Dane

+0

Przepraszam, mam cię teraz. Zaktualizowałem swój kod, pozwalając, aby reducer.js wyeksportował obiekt. To działa. Dziękuję Ci bardzo. –