장바구니 항목을 출력하려면
cart 컴포넌트에서 컨텍스트를 사용한다.
1) useContext를 호출하고 거기에 CartContext를 전달한다.
context에 접근하기 위해서다.
const Cart = props => {
const cartCtx = useContext(CartContext);
그리고 cartCtx.items가 출력되도록 cartItems를 수정한다.
const cartItems = (
<ul className={classes["cart-items"]}>
{cartCtx.items.map(item => (
2) cartItems가 제대로된 모습을 갖도록 해보자
totalAmount를 실제로 보이도록하고
hasItems로 item이 있으면 order버튼이 생기도록 한다.
const totalAmount = `$${cartCtx.totalAmount.toFixed(2)}`;
const hasItems = cartCtx.items.length > 0;
const onClickOpen = () => {
props.onClickOpen(false);
};
return (
<Modal onClickOpen={props.onClickOpen}>
{cartItems}
<div className={classes.total}>
<span>Total Amount</span>
<span>{totalAmount}</span>
</div>
<div className={classes.actions}>
<button className={classes["button--alt"]} onClick={onClickOpen}>
Close
</button>
{hasItems && <button className={classes.button}>Order</button>}
</div>
</Modal>
);
3) CartItems 컴포넌트 작성 후 cartItems에 렌더링해준다.
CartItems에 프롭으로 줄 cartItemRemoveHandler와 cartItemAddHandler를 만들어
프롭으로 넣어준다.
이 함수에 bind를 해준다
*bind를 하면 추가되거나 삭제된 항목의 id가 removeHandler로 전달된다.
bind는 함수를 향수 실행을 위해 사전에 구성한다.
함수가 실행될 때 받을 인수를 미리 구성한다.
const cartItems = (
<ul className={classes["cart-items"]}>
{cartCtx.items.map(item => (
<CartItem
key={item.id}
name={item.name}
amount={item.amount}
price={item.price}
onRemove={cartItemRemoveHandler.bind(null, item.id)}
onAdd={cartItemAddHandler.bind(null, item.id)}
/>
))}
이제 CartItem컴포넌트를 수정해보자.
'공부기록 > [강의노트] Udemy React 완벽가이드 101~200' 카테고리의 다른 글
# 156 [udemy React 완벽 가이드 노트] 장바구니에서 +, - 버튼 작동시키기 (0) | 2022.09.23 |
---|---|
# 155 [udemy React 완벽 가이드 노트] useReducer 더 활용해보기 (0) | 2022.09.22 |
# 152 [udemy React 완벽 가이드 노트] 장바구니에 물건 추가해보기 (0) | 2022.09.22 |
# 151 [udemy React 완벽 가이드 노트] Context 사용해보기 (0) | 2022.09.21 |
# 145 [udemy React 완벽 가이드 노트] Input 컴포넌트에 input 프롭을 객체로 추가하기 (0) | 2022.09.21 |