Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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_Reactjs_Redux_Reducers_Spread - Fatal编程技术网

Javascript 使用扩展语法向集合元素添加对象

Javascript 使用扩展语法向集合元素添加对象,javascript,reactjs,redux,reducers,spread,Javascript,Reactjs,Redux,Reducers,Spread,我正在使用react-redux,希望在reducer上使用扩展语法,以便返回并更新包含集合元素的对象,我希望在其中添加对象 我有以下reducer逻辑,它不起作用,因为集合中填充的是有效负载对象值,而不是对象本身: export default function(state = INITIAL_STATE, action){ switch (action.type){ case CREATE: return {...INITIAL_STATE,collection:{.

我正在使用react-redux,希望在reducer上使用扩展语法,以便返回并更新包含集合元素的对象,我希望在其中添加对象

我有以下reducer逻辑,它不起作用,因为集合中填充的是有效负载对象值,而不是对象本身:

export default function(state = INITIAL_STATE, action){
switch (action.type){
    case CREATE:
        return {...INITIAL_STATE,collection:{...state.collection,...action.payload}};
    default:
        return state;
}
}

有效载荷是一个类似于:

{
'DG67QBXQJW7':{
    key:'12345',
    price:'15',
    name:'test'
}
})

返回的状态,我希望有类似的东西:

{
name:'items',
collection:{
    'DG67QBXQJW7':{
        key:'12345',
        price:'15',
        name:'test'
    },
    'FB843VUV3N9':{
        key:'67890',
        price:'11',
        name:'test2'
    }
}
{
name:'items',
key:'12345',
price:'15',
name:'test'
}

但我之前的逻辑是这样的:

{
name:'items',
collection:{
    'DG67QBXQJW7':{
        key:'12345',
        price:'15',
        name:'test'
    },
    'FB843VUV3N9':{
        key:'67890',
        price:'11',
        name:'test2'
    }
}
{
name:'items',
key:'12345',
price:'15',
name:'test'
}

如果有人能帮我或者给我看一本高级的、好的、适合这种操作的语法指南,那就太好了


提前感谢。

您只需要使用当前状态,而不是初始状态作为对象的基础

return {...state, collection: {...state.collection, ...action.payload}};
测试示例:

const state={name:1,集合:{test3:{a:3},test4:{a:4}};
const payload={test5:{a:5}};

log({…state,collection:{…state.collection,…payload}})你完全正确@Ed Lucas。谢谢你的回答!