как добавить количество с товарной позицией в редукторе ADD_TO_CART с помощью React Redux - PullRequest
0 голосов
/ 27 ноября 2018
CartReducer.js



export default function cartReducer(state = {cart: [],qty:1 }, action) {
  switch (action.type) {
     case ADD_TO_CART:
         if (state.cart.indexOf(action.product) !== -1) {
              return state   // i want add quantity with increment (qty++)
          }
          return { cart:[...state.cart, action.product] } // send qty with cart
      case REMOVE_FROM_CART:
          return {
               cart: state.cart.filter(id => id !== action.product_id)
             }
       default:
     }
  retrun state;
}

Я хочу передать количество с товаром, и если тот же товар нажал несколько раз (AddToCart), то увеличил количество (кол-во ++)

Пожалуйста, помогите мне ...

1 Ответ

0 голосов
/ 27 ноября 2018

Во-первых, у действия всегда должны быть type и payload, где полезной нагрузкой является объект, содержащий ваши данные, в данном случае продукт.

Во-вторых, количество должно бытьчасть каждого продукта в вашем массиве cart, чтобы вы могли отслеживать каждый продукт.

Чем бы я сделал следующее:

const { type, payload } = action // extract the type and payload before the switch statement

case ADD_TO_CART: {
  const productId = payload.product.id

  if (state.cart.findIndex(product => product.id === productId) !== -1) {
    const cart = state.cart.reduce((cartAcc, product) => {
      if (product.id === productId) {
        cartAcc.push({ ...product, qty: product.qty++ }) // Increment qty
      } else {
        cartAcc.push(product)
      }

      return cartAcc
    }, [])

    return { ...state, cart }
  }

  return { ...state, cart: [...state.cart, { ...payload.product, qty: 0 }] }
}
...