2

我正在使用 react redux 并希望在 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'

}

如果有人可以帮助或向我展示用于此类操作的高级且良好的传播语法指南,那就太好了。

提前致谢。

4

1 回答 1

1

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

return {...state, collection: {...state.collection, ...action.payload}};

测试示例:

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

console.log({...state, collection: {...state.collection, ...payload}});

于 2020-02-23T23:37:32.230 回答