React + Redux, как я могу добавить или опустить объект из указанного свойства c в редукторе - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующий редуктор:

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: {[]]
}

enter image description here

Я скопировал код этого редуктора из другого редуктора у которого нет подсвойств, подобных этому, но я хочу сделать это, чтобы все «категории» были связаны в одном и том же редукторе.

Я уверен, что мне просто нужно добавить код, похожий на 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);

1 Ответ

0 голосов
/ 29 января 2020

Хорошо, я думаю, что понял это сейчас.

import {CREATE_CATEGORY, EDIT_CATEGORY, DELETE_CATEGORY, FETCH_CATEGORY, FETCH_CATEGORIES, FETCH_TOP_CATEGORIES} from "../actions/categoriesActionTypes";
import _ from 'lodash';

const initState = {
  categories: []
};

export default (state = initState, action) => {
    switch (action.type) {
        case CREATE_CATEGORY:
        case EDIT_CATEGORY:
        case FETCH_CATEGORY:
            return {
                ...state,
                categories: {
                    ...state.categories,
                    [action.payload.id]: action.payload
                }
            };

        case DELETE_CATEGORY:
            return {
                ...state,
                categories: _.omit(state.categories, action.payload),
                topCategories: _.omit(state.topCategories, 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...