javascript - 为什么在 React 购物车中更改商品数量时总价计算不起作用?
问题描述
我无法总结我的 React 购物车中物品的总成本。我使用了 reduce 方法,但是在我当前的代码中,当您将商品添加到购物车并重定向到结账total
时,NaN
除非我弄乱数量,否则它会出现问题,即使那样它也是错误的。将不胜感激任何帮助。
结帐.js:
import React, { useContext, useEffect, useState } from "react";
import { Context } from "../../Context";
import CartItem from "../Cart/CartItem";
function Checkout() {
const { cartItems } = useContext(Context);
let total = cartItems.reduce((sum, { qty, price }) => sum + price * qty, 0); //calculate total
const numberOfItems = cartItems.length === 1 ? `1 item` : `${cartItems.length} items`;
return (
<div>
{cartItems.map(item => (
<CartItem cartItems={cartItems} item={item} key={item.id} />
))}
<p>
{cartItems.length === 0
? "Cart is Empty."
: `You have ${numberOfItems} in your cart.`}
</p>
<h1>Total: ${total}</h1> //appears as NaN on render
</div>
);
}
export default Checkout;
示例产品对象:
{
id: 1,
url: "https://picsum.photos/id/30/200/300",
itemName: "Mug",
itemDescription: "Lorem ipsum dolor sit amet",
price: 5,
}
CartItem.js
import React, { useContext } from "react";
import "./cart.css";
import { Context } from "../../Context";
function CartItem({ item }) {
const { increaseQty } = useContext(Context);
item.qty = 1; //assign quantity key to product object
const options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const dropDown = options.map(x => {
return <option key={x}>{x}</option>;
});
return (
<div className="cart-item-container">
<img src={item.url} className="cart-img" />
<span>
{item.itemName}-{item.price}$
</span>
<select onChange={e => increaseQty(item, e.target.value)}>
{dropDown}
</select>
</div>
);
}
export default CartItem;
当我更改购物车中多个项目的数量时,会出现该错误,它正在扔掉一些东西。
function increaseQty(product, amount){
cartItems.find(item => item.itemName === product.itemName).qty = amount;
setQty(amount);
};
解决方案
推荐阅读
- azure - 将 Azure AD 声明映射到我的 AspNet Core 应用程序
- jakarta-ee - 删除 urlEncodingAttributes 值会破坏页面 (hybris)
- couchbase - couchbase 中的 SubDoc 操作
- grails - grails“无法解析类 groovy.util.FileNameFinder”
- angular - 如何从Angular 5+中的对象创建带有查询参数的url字符串?
- php - 未捕获的错误:调用未定义的函数 NOW()
- javascript - “2018-06-29T08:51:00Z”是什么时间格式?你能告诉我我应该在 moment.js 中使用什么格式的字符串来实现这一点吗?
- matlab - 将 3d matlab 矩阵重塑为具有索引和值的 2d 矩阵
- asp.net-core - ASP.Net Core 2.1 中关于 Razor 页面的自定义路由
- javascript - Vue从特定索引到特定索引迭代数组