Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组突变的重复检查_Javascript_Arrays_Redux - Fatal编程技术网

Javascript 数组突变的重复检查

Javascript 数组突变的重复检查,javascript,arrays,redux,Javascript,Arrays,Redux,我构建了我的第一个react redux应用程序,如果我在reducer函数上修改了一个数组,我需要帮助理解 我正在测试的操作是选择项目: 根据操作传递的选择更新“selected”布尔属性 它是一个包含以下对象的数组: "allItems":[ { "id": 1, "name": "item1", "selected": false }, { "id": 2, "name": "i

我构建了我的第一个react redux应用程序,如果我在reducer函数上修改了一个数组,我需要帮助理解

我正在测试的操作是选择项目: 根据操作传递的选择更新“selected”布尔属性

它是一个包含以下对象的数组:

    "allItems":[
    {
        "id": 1,
        "name": "item1",
        "selected": false
    },
    {
        "id": 2,
        "name": "item2",
        "selected": false
    },
    {
        "id": 3,
        "name": "item3",
        "selected": false
    },
    {
        "id": 4,
        "name": "item4",
        "selected": false
    }
]
现在,减速器:

const allItems = (state=[], action) => {

switch(action.type){

    case "SELECT_ITEM" :

        return state.map( (item, index) => {
            if(item.id === action.payload.id){
                return { ...item, selected: true}
            }
            else
            {
                return {...item, selected: false}
            }
        })

    default:
    return state
    }

}

谢谢你

我建议你返回一个
对象。例如,assing({},item,selected:true)
这将确保你总是返回一个具有新状态的新对象。

这是
所有项
切片的切片缩减器吗?是的,在第一行,假设它是
常量项=(state=[],action)=>{
我现在就编辑这个问题好吧,也许你可以描述一下它是如何不起作用的。例如,在reducer处理操作后,状态如何不符合你的预期?感谢你的回答,根据你的建议我这样做了:
case“SELECT_ITEM”:return state.map((ITEM,index)=>{if(ITEM.id==action.payload.id){return Object.assign({},item,{selected:true})}else{return Object.assign({},item,{selected:false})}})
现在可以了吗?