2016-12-05 2 views
0

還元剤のarraypropertyにアイテムを追加するには?私のReduxの減速のための私のitemsArrayのプロパティに項目をプッシュしよう

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

大変お世話になりました –

関連する問題