需要使用redux从数组中删除项目

时间:2019-05-04 17:34:06

标签: javascript reactjs redux

所以我有一个减速器要添加到数组中 创建减速器:

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

删除reducer(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')从itemList删除'xyz'

2 个答案:

答案 0 :(得分:1)

在删除时,您只需要返回过滤后的列表即可,也不必使用传播运算符。

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

答案 1 :(得分:0)

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);