javascript 如何在React中从状态数组中删除一个项目而不创建新的数组

wkyowqbh  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(107)

我是React和学习环境中的新手。在学习过程中,我遇到了一个创建购物车的项目,其中添加和删除值。添加项目部分已经实现,但我无法实现删除功能。
这是我的Item组件,我在这里处理项目数组并添加它们

import { CartContext } from "./Cart-Context";
import { useContext } from "react";
// import { v4 as uuidv4 } from 'uuid';
import React from "react";

const Items = () => {
  const ItemArr = [
    { name: "item1" },
    { name: "item2" },
    { name: "item3" },
    { name: "item4" },
    { name: "item5" },
  ];
  const context = useContext(CartContext);

  const handleClick = (item) => {
    context.updateCart([...context.cart, item]);
   console.log(context.cart);
  };
  const handleRemove = (item) =>{
  const newList = context.cart.filter((newItem, key)=>{
    return newItem !== key
  })
  console.log(newList);
  }

  return (
    <div>
      {ItemArr.map((item) => {
        return (
          <div>
            {item.name}
            <button
              onClick={()=>{handleClick(item)}}
            >
              Add To Cart
            </button>
            <button onClick={()=>{handleRemove(item)}}>Remove from Cart</button>
          </div>
        );
      })}
    </div>
  );
};

export default Items;

这是我的提供程序组件

import { useState } from "react";
import { CartContext } from "./Cart-Context";


const CartProvider = (props) =>{
    const [cart, setCart] = useState([]);
    const [removeCart, setRemoveCart] = useState([])

    return (
    <CartContext.Provider value={{cart: cart ,updateCart: setCart, remove: removeCart , updateRemove: setRemoveCart}}>
            {
                props.children
            }
    </CartContext.Provider>
    );
}

export default CartProvider;

现在,单击删除按钮,我想从购物车数组(context.cart)中删除该特定项目

sq1bmfud

sq1bmfud1#

我认为你的filter方法不正确。我假设你想删除提供的item,但过滤器没有引用它。你正在比较当前元素的索引和元素本身,只要项目不是数字,它将始终是false,这与索引相同。此外,新创建的列表不用于更新购物车。
我想你会保留购物车中的所有项目,而不是提供的一个,所以试试这个:

const handleRemove = (item) =>{
  const newList = context.cart.filter((newItem)=>{
    return newItem !== item
  })
  context.updateCart(newList);
  console.log(newList);
}
iyfamqjs

iyfamqjs2#

只需设置新购物车内容:

const handleRemove = (item) =>{
  const newList = context.cart.filter((newItem, key)=>{
    return newItem !== key
  });

  context.updateCart(newList);

  console.log(newList);
  }

相关问题