Свернуть
Это после потока, который я разместил здесь
После многого устранения неполадок я обнаружил, что этот код работает без проблем
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})