Home > Mobile >  How to filter array with items in cart?
How to filter array with items in cart?

Time:11-25

I have a cart with products, when you click on the "Add" button, the product is added to the cart along with the parameters.

My problem is that when I click "Add" again, this product is added and displayed on the screen. That is, there are two identical products in the basket. I need that when the same product is added repeatedly, its quantity increases, but the card was one. enter image description here

const Cart = (props) => {
  const cartItems = useSelector((state) => state.cart.productArr.items);
  return (
    <Card className={classes.cart}>
      <h2>Your Shopping Cart</h2>
      <ul>
        {filteredArr.map((cartItem) => (
          <CartItem
            key={cartItem.id}
            item={{
              title: cartItem.title,
              price: cartItem.price,
              quantity: cartItem.quantity,
            }}
          />
        ))}
      </ul>
    </Card>
  );
};

CodePudding user response:

this code can help you https://codesandbox.io/s/cool-architecture-6x0x8n?file=/src/App.js

import { useState } from "react";

const CartItem = ({ item, onAdd, onSubtract }) => {
  return (
    <li>
      <p>{item.title}</p>
      <p>{item.price}</p>
      <p>{item.quantity}</p>
      <button onClick={() => onSubtract(item.id)} disabled={!item.quantity}>
        {" "}
        -{" "}
      </button>
      <button onClick={() => onAdd(item.id)}>   </button>
    </li>
  );
};

const Cart = ({ cartItems, setCartItems }) => {
  const onAdd = (currentId) => {
    const newItems = cartItems.map((item) => {
      if (item.id === currentId) {
        return { ...item, quantity: item.quantity   1 };
      }
      return item;
    });

    setCartItems(newItems);
  };

  const onSubtract = (currentId) => {
    const newItems = cartItems.map((item) => {
      if (item.id === currentId && item.quantity > 0) {
        return { ...item, quantity: item.quantity - 1 };
      }
      return item;
    });

    setCartItems(newItems);
  };

  return (
    <div>
      <h2>Your Shopping Cart</h2>
      <ul>
        {cartItems.map((cartItem) => (
          <CartItem
            key={cartItem.id}
            item={cartItem}
            onAdd={onAdd}
            onSubtract={onSubtract}
          />
        ))}
      </ul>
    </div>
  );
};

export default function App() {
  const [items, setItems] = useState([
    {
      id: 1,
      title: "Book",
      price: 7,
      quantity: 1
    },
    {
      id: 2,
      title: "pencil",
      price: 9,
      quantity: 0
    }
  ]);

  return (
    <div className="App">
      <Cart cartItems={items} setCartItems={setItems} />
    </div>
  );
}
  • Related