добавление объектов в элементы коллекций с использованием распространенного синтаксиса - PullRequest
2 голосов
/ 24 февраля 2020

Я работаю с реагировать на редукцию и хочу использовать синтаксис распространения для редуктора, чтобы возвращать и обновлять объект, содержащий элемент коллекции, в который я хочу добавить объекты.

У меня есть следующие логи редуктора c, который не работает, потому что коллекция заполняется значениями объекта полезной нагрузки вместо самого объекта:

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'
    }
}

}

Но я получил с моей предыдущей показанной логи c что-то вроде:

{
name:'items',
key:'12345',
price:'15',
name:'test'

}

Если бы кто-то мог помочь или показать мне расширенное и хорошее руководство по синтаксису распространения для такого рода операций, было бы замечательно.

Заранее спасибо.

1 Ответ

1 голос
/ 24 февраля 2020

Вам просто нужно использовать текущее состояние, а не 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}});
...