Если у меня есть массив объектов, представляющих сказать корзина (в React)Реагировать функцию Reducer вернуть массив объектов
[ { id: 1, qty: 1 } ]
что бы аккуратный способ добавления элемента в этой state
?
Мне нужно было бы проверить, содержит ли массив объект с этим идентификатором, если он это сделал, а затем обновить его количество, если нет, то просто создайте новый элемент массива, добавив этот новый объект.
Я получаю себя в беспорядке, пытаясь написать это с новым синтаксисом ES6 в функциональном стиле ... это то, что я до сих пор ...
let initialState = []
export default function shoppingCart(state=initialState, action) {
switch(action.type) {
case 'ADD_TO_CART':
// check the array of objects and only act on the one we are interested in
let newQty = action.payload.qty
console.log("state : ", state)
for(let i = 0; i < state.length; i++) {
if (state[i].id === action.payload.id) {
newQty = state[i].qty + action.payload.qty
console.log("QTY : " + newQty)
}
}
//Obviously this will not work if the {id ...} already exists
return [ ... state, {id:action.payload.id, qty:newQty} ] // todo: update this to contain the payload with qty included
case 'REMOVE_FROM_CART':
return state.filter(elem => elem.id !== action.payload.id)
default:
return state
}
}
парадигма для массива неизменяемым – avrono
Я предполагаю, что я могу порезать() первый – avrono
Он неизменен там. '[... state]' - это новый массив. – dfsq