【发布时间】:2021-02-17 16:15:38
【问题描述】:
我正在尝试实现一个名为“addToCart”的函数,该函数负责在用户单击特定产品时将产品添加到“cartItems”状态中。我可以添加任意数量的产品。 但是每当我点击一个特定的产品时,如果它已经在我的购物车中,我想更改它的数量,而不是添加重复的项目。无论我点击特定产品多少次,我都想增加项目数量。 我已经上传了一些代码以使其更简洁。
初始状态
const initState = {
cartItems: []
}
购物车减速器
case CART_ADD_ITEM:
const item = action.payload;
const existItem = state.cartItems.find((x) => x.product === item.product);
if (existItem) {
return {
...state,
cartItems: state.cartItems.map((x) =>
x.product === existItem.product ? { ...item, qty: item.qty + 1 } : x
),
};
} else {
return {
cartItems: [...state.cartItems, item],
};
}
cartActions
export const addToCart = (productId, qty) => async (dispatch, getState) => {
try {
const { data } = await Axios.get(`/api/products/${productId}`);
dispatch({
type: CART_ADD_ITEM,
payload: {
name: data.name,
price: data.price,
product: data._id,
qty,
},
});
} catch (error) {
console.log(error.response);
}
};
产品组件
import React from "react";
import { useDispatch } from "react-redux";
import { addToCart } from "../actions/cartActions";
const Product = ({ product, qty }) => {
const dispatch = useDispatch();
const addToCartHandler = () => {
dispatch(addToCart(product._id, qty));
};
return (
<div className="product-card" onClick={addToCartHandler}>
<h3>{product.name}</h3>
<p>{product.price}</p>
</div>
);
};
export default Product;
【问题讨论】:
标签: reactjs react-redux