Вы можете попробовать что-то вроде этого.Вместо этого изменив ADD_ITEM на TOGGLE_ITEM, где вы проверяете наличие элемента, используя что-то вроде Array.prototype.find .Добавление, если оно не существует, и удаление, если оно существует:
export const click = item => ({
type: TOGGLE_ITEM,
payload: item,
});
import {
TOGGLE_ITEM,
} from "../actions";
const initialState = {
items: [],
}
export default (state = initialState, action) => {
switch (action.type) {
case TOGGLE_ITEM:
const currentItem = state.items.find(item => item.id === action.payload.id);
if (!currentItem) {
return {
...state,
items: [...state.items, action.payload],
};
} else {
const newItems = state.items.filter(item => item.id !== action.payload.id];
return {
...state,
items: [...newItems]
};
}
default:
return state;
}
};
Возможно, вы захотите рассмотреть возможность использования отдельных действий добавления, обновления и удаления, а также соответственно распределять различные действия из ваших компонентов.