Свернуть

Это после потока, который я разместил здесь

После многого устранения неполадок я обнаружил, что этот код работает без проблем

import React from 'react';
import { createStore, combineReducers, applyMiddleware } from 'redux';
import createLogger from 'redux-logger';
import thunkMiddleware from 'redux-thunk';
import { Provider } from 'react-redux';
import DataTableReducer from './reducers/DataTableReducer';
import DimensionPickerReducer from './reducers/DimensionPickerReducer';

const loggerMiddleware = createLogger();
const store = createStore(
    DimensionPickerReducer, 
    applyMiddleware(
        thunkMiddleware, 
        loggerMiddleware
    )
);

export default store;

Но если я заменил свой единственный редуктор на вызов редуктора комбинации, например

import React from 'react';
import { createStore, combineReducers, applyMiddleware } from 'redux';
import createLogger from 'redux-logger';
import thunkMiddleware from 'redux-thunk';
import { Provider } from 'react-redux';
import DataTableReducer from './reducers/DataTableReducer';
import DimensionPickerReducer from './reducers/DimensionPickerReducer';

const loggerMiddleware = createLogger();
const store = createStore(
    combineReducers({
        DataTableReducer,
        DimensionPickerReducer
    }), 
    applyMiddleware(
        thunkMiddleware, 
        loggerMiddleware
    )
);

export default store;

Я сразу же начинаю получать ошибки с помощью элемента управления DimensionPicker, что обязательные реквизиты не указаны.

Итак, метод combReducer не работает для меня.

Я загрузил здесь пример проекта, который показывает проблему.

https://github.com/abhitechdojo/MovieLensReact

Вам нужно будет запустить npm install после выполнения git clone

Ответ 1

С комбинированными редукторами ваш магазин будет иметь такую ​​структуру данных:

{
    DimensionPickerReducer: {
        dimenisionName: '',
        pickerIsLoading: false,
        pickerError: '',
        currentAttribute: '',
        attributeList: []
    },
    DataTableReducer: {
        tableData: [],
        tableIsLoading:false,
        tableError: ''
    }
}

Итак, вы должны настроить свои контейнеры для работы с комбинированным хранилищем. Например, в DimensionPickerContainer.js вам следует изменить функцию mapStateToProps:

const mapStateToProps = (state) => {
    return {
        attributeList : state.DimensionPickerReducer.attributeList,
        currentAttribute : state.DimensionPickerReducer.currentAttribute
    }
}

Вы также можете назвать свои сокращения в магазине, чтобы они не выглядели уродливыми в структуре данных. Например. combineReducers({ dimensionPicker: DimensionPickerReducer, dataTable: DataTableReducer})