Необходимо изменить полу qty у одного из элементов массива, этот элемент передается в payload экшена.
// массив объектов
items = [
{
id: '1',
desc: 'Some description',
qty: 1
},
{
id: '2',
desc: 'Another description',
qty: 1,
},
// и т.д.
// action
export const incrementQty = (item) => {
return {
type: INCREMENT_QTY,
payload: item
}
};
// reducer с ошибкой
const initialState = {
items: items
};
export default function(state = initialState, action) {
const {type, payload} = action;
switch (type) {
case INCREMENT_QTY:
const newItem = state.items.filter(item => item === payload);
return {
...state,
newItem: {
...newItem,
[newItem.qty]: 10
}
};
default:
return state
}
}
Я знаю, что при изменении вложенных данных необходимо делать копии на всех уровнях вложенности.
Разбирал пример из документации:
function updateVeryNestedField(state, action) {
return {
...state,
first : {
...state.first,
second : {
...state.first.second,
[action.someId] : {
...state.first.second[action.someId],
fourth : action.someValue
}
}
}
}
}
И мой код выше - попытка повторить правильных подход, описанный в документации. Но у меня не получается, я что-то делаю не так, чего-то явно не понимаю в этом процессе. Может ли кто-то объяснить, в чем моя ошибка? Я ожидаю на выходе, что изменится значение поля qty, но получаю в state следующее:
items: [тут массив объектов items без каких либо изменений]
newItem.undefined: 10 - новое поле в состоянии
Также в курсе про immutable.js и immutability-helper и в будущем планирую пользоваться этими решениями. Но в этом примере хотелось бы разобраться без них и понять, что происходит в коде.