2016-12-05 3 views
0

Попытка нажать элемент в моей itemsarray собственности для моего Redux редуктора:Как добавить элемент в arrayproperty в редукторе?

const initialState = { 
    items: [], 
    cartOpen: false, 
    total: 0 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 

      var newstate = Object.assign({}, state, 
       {items: [state.items, ...action.payload.found]} 
      ); 

      console.log('testing=newstate', newstate); 

      var newTotal = 0; 
      console.log('testing newstate', newstate) 

      newstate.items.forEach(it => { 
       newTotal += it.price; 
       console.log('testing price', it.price) 
      }); 
      newstate.total = newTotal; 
      newstate.cartOpen = true 
      //debugger; 
      return newstate; 


     default: 
      return state 
    } 
} 

export default Cart; 

action.payload.found выглядит следующим образом:

{ 
    "id":"100", 
    "price":10 
} 

Как я могу подтолкнуть этот объект в массив пунктов ?

ответ

0

Похоже, вы используете спред оператора на неправильном товаре. Вы должны использовать это вместо того, чтобы:

 var newstate = Object.assign({}, state, 
      {items: [...state.items, action.payload.found]} 
     ); 

Ваш код {items: [state.items, ...action.payload.found]} фактически пытался распространить action.payload.found, который является объектом, а затем возвращается массив, где первый элемент был старый массив с последующим значениями из action.payload.found

Например предположим, оригинал state.items был [A, B, C] и action.payload.found был {id: "100", price: 10}, затем {items: [state.items, ...action.payload.found]} фактически вернул [[A, B, C], "100", 10]. Однако вы хотите, чтобы он вместо этого возвращал [A, B, C, {id: "100", price: 10}]. Поэтому вам необходимо распространить state.items.

+0

Awesome dude thanks –

Смежные вопросы