React - TypeError: baseReducer не является функцией - PullRequest
0 голосов
/ 19 марта 2020

я создаю SPA, используя React. Я хочу, чтобы состояния сохранялись после страницы refre sh, поэтому я использовал 'redux-persist'. Я не знаю, является ли мой импорт 'allReducers' неправильным, потому что полученное мной сообщение TypeError: baseReducer не является функцией

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './components/App.jsx';
import * as serviceWorker from './serviceWorker';
import {Provider} from 'react-redux';
import {applyMiddleware, combineReducers, createStore} from "redux";
import {persistReducer, persistStore} from 'redux-persist';
import allReducers from './redux/store'
import {PersistGate} from 'redux-persist/integration/react';
import storage from 'redux-persist/lib/storage';
import thunk from "redux-thunk";


const persistConfig = {
    key: 'root',
    storage,
};

const persistedReducer = persistReducer(persistConfig, allReducers);
let store = createStore(persistedReducer, applyMiddleware(thunk));
let persistor = persistStore(store);


ReactDOM.render(<Provider store={store}>
                    <PersistGate loading={null} persistor={persistor}>
                        <App />
                    </PersistGate>
                </Provider>, document.getElementById('root'));

, но, наконец, когда страница отображается, я получил это сообщение TypeError: baseReducer не является функцией

Это ./redux/store

import { applyMiddleware, combineReducers, createStore } from 'redux'
import { ADD_TO_CART, GET_COURSE_LIST, USUARIO_LOGIN } from './action'
import { composeWithDevTools } from 'redux-devtools-extension'
import { persistStore, persistReducer } from 'redux-persist'
import thunk from 'redux-thunk'



const initialCart = {
    cart:[]
}

const initialCourses ={
    courses:[]
}

const initialUser ={
    user:{}
}

const cartReducer = ( state = initialCart,action) => {
    console.log(action)

    if(action.type===ADD_TO_CART)
    {

        if(state.cart.find(c=>c===action.id)) 
        {
            return state
        }

        return{
            ...state,
            cart: state.cart.concat(action.id),            
        }

    }
    return state

}

const coursesReducer = (state=initialCourses, action) =>{
    console.log(action)
    if(action.type === GET_COURSE_LIST){
        return {
            ...state,
            courses: action.courses
        }
    }
    return state
}

const userReducer = (state=initialUser, action)=>{
    console.log(action)
    if(action.type === USER_LOGIN){
        return {
            ...state,
            user: action.user
        }
    }
    return state

}

const storage = createStore(combineReducers({cartReducer, coursesReducer, userReducer}), composeWithDevTools(applyMiddleware(thunk)))

export default storage

1 Ответ

0 голосов
/ 19 марта 2020

Функция persistReducer ожидает редуктор, а не хранилище.

Вы можете экспортировать редуктор из файла хранилища отдельно или просто экспортировать его по умолчанию, если вы используете только постоянное хранилище. Вот пример его экспорта отдельно:

./redux/store:

export const rootReducer = combineReducers({cartReducer, coursesReducer, userReducer})

const store = createStore(rootReducer, composeWithDevTools(applyMiddleware(thunk)))
export default store 

Ваш root файл компонента:

import { rootReducer } from './redux/store'

// ...

const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = createStore(persistedReducer, applyMiddleware(thunk));
const persistor = persistStore(store);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...