ProductsList.jsx를
{/* products가 있을 경우 반복문으로 출력 */}
{data.products &&
data.products.map((product) => (
<ProductCard
key={product._id}
id={product._id}
title={product.title}
image={product.images[0]}
price={product.price}
rating={product.reviews.rate}
ratingCounts={product.reviews.counts}
stock={product.stock}
/>
))}
아래와 같이 수정한다.
{/* products가 있을 경우 반복문으로 출력 */}
{data.products &&
data.products.map((product) => (
<ProductCard key={product._id} product={product} />
))}
ProductCard.jsx에서는
const ProductCard = ({ product }) => {
로 수정하고
아래의 출력할 데이터들의 앞에 . product?.를 붙여서 수정한다.
import "./ProductCard.css";
import star from "../../assets/white-star.png";
import basket from "../../assets/basket.png";
import { Link } from "react-router-dom";
import CartContext from "../../contexts/CartContext";
import { useContext } from "react";
const ProductCard = ({ product }) => {
const { addToCart } = useContext(CartContext);
return (
<article className="product_card">
<div className="product_image">
<Link to={`/product/${product?.id}`}>
<img
src={`http://localhost:5000/products/${product?.images[0]}`}
// {image}만 넣으면 제대로 불러오지 못함
// 백엔드 서버 주소로 요청하면 됨
alt="product image"
/>
</Link>
</div>
<div className="product_details">
<h3 className="product_price">
{product?.price?.toLocaleString("ko-KR")} 원
</h3>
{/* ?를 넣으면 데이터가 없더라도 에러가 나지않음 */}
<p className="product_title">{product?.title}</p>
<footer className="align_center product_info_footer">
<div className="align_center">
<p className="align_center product_rating">
<img src={star} alt="star" /> {product?.reviews.rate}
</p>
<p className="product_review_count">{product?.reviews.counts}</p>
</div>
{/* 재고가 있을 경우에만 장바구니 담기 표시 */}
{product?.stock > 0 && (
<button
className="add_to_cart"
onClick={() => addToCart(product, 1)}
>
<img src={basket} alt="basket button" />
</button>
)}
</footer>
</div>
</article>
);
};
export default ProductCard;
useContext로 addToCart함수를 가져온다.
클릭할 경우에 addToCart 실행한다. 수량은 1개로
정상 출력되는지 확인한다.
백엔드에서도 추가된것을 확인한다.
'FRONTEND > React' 카테고리의 다른 글
[myCart] 주문하기 (checkout) 및 주문 페이지에서 백엔드(orders) 데이터 가져오기 (0) | 2023.12.22 |
---|---|
[myCart] 로그인 된 유저가 있을 경우에만 장바구니 노출하기 (0) | 2023.12.22 |
[myCart] 장바구니 구매수량 변경 및 백엔드 업데이트 (0) | 2023.12.21 |
[myCart] 장바구니 상품 삭제 (0) | 2023.12.21 |
[myCart] 유저 컨텍스트(UserContext), 장바구니 컨텍스트(CartContext) 적용 (0) | 2023.12.21 |