Необходимо удалить элемент из массива, используя приставку - PullRequest
0 голосов
/ 04 мая 2019

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

export default (itemsList = [], action) => {
    if (action.type === 'ADD_ITEM') {
        return [...itemsList, action.payload]
    }
    return itemList
}

удаление редуктора (99%, что-то здесь не так, но я понятия не имею, что):

export default (itemList = [], action) => {
    if (action.type === 'DELETE_ITEM') {
        return [...itemList, itemList.filter(item => item !== action.payload)]
    }
    return itemList
};

action / index.js:

export const addItemToList = item => {
    return {
        type: 'ADD_ITEM',
        payload: selectedItem
    }
};

export const deleteItemFromList = item => {
    return{
        type: 'DELETE_ITEM',
        payload: selectedItem
    }
};

допустим, у меня есть itemList = ['abc', 'xyz', 'qwe']

и я хочу использовать deleteItem ('xyz') для удаления 'xyz' из itemList

Ответы [ 2 ]

1 голос
/ 04 мая 2019

При удалении вам просто нужно вернуть отфильтрованный список и не использовать оператор распространения тоже.

export default (itemList = [], action) => {
    if (action.type === 'DELETE_AUTHOR') {
        return itemList.filter(item => item !== action.payload)
    }
    return listOfAuthorsSelected
};
0 голосов
/ 04 мая 2019

Array.filter () возвращает новый массив с заданным условием фильтра и не изменяет существующий массив.Вам не нужно использовать ...itemList (оператор распространения).Здесь вы фактически добавляете подмассив каждый раз.

Вот простой пример выполнения

var array1 = ["abc", "def" , "ghi"];

var array2 = [...array1, array1.filter((item) => {
return item !== "def"
})];

document.write(array2);


// correct way to filter
var array3 = ["abc", "def" , "ghi"];

var array4 = array3.filter((item) => {
return item !== "def"
});

document.write("<hr/>"+array4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...