У меня есть следующий редуктор:
import {CREATE_CATEGORY, EDIT_CATEGORY, DELETE_CATEGORY, FETCH_CATEGORY, FETCH_CATEGORIES, FETCH_TOP_CATEGORIES} from "../actions/categoriesActionTypes";
import _ from 'lodash';
export default (state = [], action) => {
switch (action.type) {
case CREATE_CATEGORY:
case EDIT_CATEGORY:
case FETCH_CATEGORY:
return {
...state,
[action.payload.id]: action.payload
};
case DELETE_CATEGORY:
return _.omit(state, action.payload);
case FETCH_CATEGORIES:
return {...state, categories:_.mapKeys(action.payload, 'id')};
case FETCH_TOP_CATEGORIES:
return {...state, topCategories: _.mapKeys(action.payload, 'id')};
default:
return state;
}
}
, который вызывается двумя действиями, одно - FetchTopCategories
, которое обновляет ключ topCategories
. Действие «Получить категории» выбирает категории, которые обновляют ключ категорий.
Я могу узнать, как добавить или исключить категорию из ключа категорий, когда категории CREATE
, EDIT
, FETCH
или DELETE
называется.
Состояние выглядит следующим образом:
categories:
{
topCategories: {[]},
categories: {[]]
}
Я скопировал код этого редуктора из другого редуктора у которого нет подсвойств, подобных этому, но я хочу сделать это, чтобы все «категории» были связаны в одном и том же редукторе.
Я уверен, что мне просто нужно добавить код, похожий на FetchCategories
и FetchTopCategories
в остальных типах действий, но я не могу определить синтаксис.
Я пытаюсь сделать что-то вроде:
case CREATE_CATEGORY:
case EDIT_CATEGORY:
case FETCH_CATEGORY:
return {
...state,
categories:[action.payload.id]: action.payload
};
case DELETE_CATEGORY:
return categories:_.omit(state, action.payload);