我正在做一个使用Reaction的Electron 商务项目. 允许用户点击物品并将其添加到购物车中. 但是,我无法从购物车中删除这些物品.

下面是ShopContext.jsx的代码:

import React, { createContext, useState } from "react";
import all_product from "../Components/Assets/all_product"

export const ShopContext = createContext(null);

const getDefaultCart = () => {
    let cart = {};
    for (let index = 0; index < all_product.length+1; index++) {
        cart[index] = 0;
    }

    return cart;
}

const ShopContextProvider = (props) => {
    const [cartItems, setCartItems] = useState(getDefaultCart());

    const addToCart = (itemId) => {
        setCartItems((prev) => ({...prev, [itemId]:prev[itemId]+1}));
    }

    const removeFromCart = (itemId) => {
        setCartItems((prev) => ({...prev, [itemId]:prev[itemId]-1}));
        console.log(cartItems);
    }

    const contextValue = {getTotalCartAmount, all_product, cartItems, addToCart, removeFromCart, getTotalCartItems};

    return (
        <ShopContext.Provider value={contextValue} >
            {props.children}
        </ShopContext.Provider>
    );
}

export default ShopContextProvider;

这是CartItems.jsx的代码:

import React, { useContext } from 'react'
import './CartItems.css'
import { ShopContext } from '../../Context/ShopContext';
import remove_icon from '../Assets/cart_cross_icon.png'

const CartItems = () => {
    const {getTotalCartAmount, all_product, cartItems, removeFromCart} = useContext(ShopContext);

    return (
        <div className="cartitems">
            <div className="cartitems-format-main">
                <p>Products</p>
                <p>Title</p>
                <p>Price</p>
                <p>Quantity</p>
                <p>Total</p>
                <p>Remove</p>
            </div>
            <hr />
            {all_product.map((e) => {
                if (cartItems[e.id] > 0) {
                    return <div>
                        <div className="cartitems-format cartitems-format-main">
                            <img src={e.image} alt="" className="cartitems-product-icon" />
                            <p>{e.name}</p>
                            <p>${e.new_price}</p>
                            <button className="cartitems-quantity">{cartItems[e.id]}</button>
                            <p>${e.new_price * cartItems[e.id]}</p>
                            <img className="cartitems-remove-icon" src={remove_icon} alt="" onClick={() => {removeFromCart()}} />
                        </div>
                        <hr />
                    </div>
                }
                return null;
            })}
            <div className="cartitems-down">
                <div className="cartitems-total">
                    <h1>Cart Total</h1>
                    <div>
                        <div className="cartitems-total-item">
                            <p>Subtotal</p>
                            <p>${getTotalCartAmount()}</p>
                        </div>
                        <hr />
                        <div className="cartitems-total-item">
                            <p>Shipping Fee</p>
                            <p>Free</p>
                        </div>
                        <hr />
                        <div className="cartitems-total-item">
                            <h3>Total</h3>
                            <h3>${getTotalCartAmount()}</h3>
                        </div>
                    </div>
                    <button>PROCEED TO CHECKOUT</button>
                </div>
                <div className="cartitems-promocode">
                    <p>If you have a promo code, enter it here...</p>
                    <div className="cartitems-promobox">
                        <input type="text" placeholder="Promo Code" />
                        <button>Submit</button>
                    </div>
                </div>
            </div>
        </div>
    );
}

export default CartItems

由于添加到购物车和从购物车删除功能是相似的,一个工作,而另一个不工作,我不知道该try 什么.

这是指向我的项目的链接,以防需要更多文件: GitHub

我已经添加了我认为与这个问题相关的部分,其余部分可以在GitHub存储库中看到.

推荐答案

在函数removeFromCart中,必须发送ID乘积,以便removeFromCart可以找到它并从它中减go 它,如下所示:

    {all_product.map((e) => {
              if (cartItems[e.id] > 0) {
                  return <div>
                        <div className="cartitems-format cartitems-format-main">
                            <img src={e.image} alt="" className="cartitems-product-icon" />
                            <p>{e.name}</p>
                            <p>${e.new_price}</p>
                            <button className="cartitems-quantity">{cartItems[e.id]}</button>
                            <p>${e.new_price * cartItems[e.id]}</p>
                            <img className="cartitems-remove-icon" src={remove_icon} alt="" onClick={() => {removeFromCart(e.id)}} />
                        </div>
                        <hr />
                    </div>
                }
      return null;
    })}

Reactjs相关问答推荐

利用OVERPASS API端点计算某建筑的表面积

关于同一位置的不同组件实例的react S规则被视为相同组件

获取点击的国家/地区名称react 映射

是否在Extra Reducer完成作业(job)时触发createListenerMiddleware?

梅X折线图无响应

基本react 应用程序正在触发两次Use Effect

React Router:在没有手动页面刷新的情况下,路由不会更新内容

Reaction-路由-DOM v6与v5

如何使用TouchStart/TouchEnd在Table ReactJS中交换位置?

如何通过reactjs正确显示记录

Github 操作失败:发布 NPM 包

列表中的每个子项都应该有一个唯一的keyprops .在react 应用程序中

Yup.number().integer() 不将 1.0 视为小数,如何解决这个问题?

useRef.current.value 为空值

为什么我的 Next.js (React) 组件只有在页面中时才有效?

React Three Fiber mesh 标签在此浏览器中无法识别

使用 React.lazy 调试 webpack 代码拆分

页面加载时不显示数组中的数据

如何使用 babel 将 SVG 转换为 React 组件?

理解 React 中的 PrevState