Udemy React 강의 171번 정리
이번 강의의 목표는 Cart 관련 state + 로직을 전부 Context로 옮겨서 prop drilling을 완전히 제거하는 것이다.
이전까지 구조는 대략 이러했다.
App
├─ Header (cart items 개수 필요)
├─ Product (add to cart 함수 필요)
└─ CartModal
└─ Cart (items + update 함수 필요)
그래서 App에서 onAddToCart, cartItems, onUpdateCartItemQuantity 이런 props들이 계속 내려갔다.
문제는 중간 컴포넌트들은 이 props를 사용하지도 않는데 단지 전달만 하기 위해 존재하게 되는 것이었다. 전형적인 prop drilling.
const ctxValue = {
items: shoppingCart.items,
addItemToCart: handleAddItemToCart,
updateItemQuantity: handleUpdateCartItemQuantity,
};
<CartContext.Provider value={ctxValue}>
{children}
</CartContext.Provider>
이제 Context는 단순한 값 공유를 넘어서 cart items를 읽고, cart 업데이트 함수를 호출하는 것까지 모두 가능해짐.
<Product onAddToCart={handleAddItemToCart} />
After
const { addItemToCart } = useContext(CartContext);
<button onClick={() => addItemToCart(id)}>Add</button>
Header는 장바구니 개수만 필요함.
const { items } = useContext(CartContext);
const totalItems = items.length;
const { items, updateItemQuantity } = useContext(CartContext);
App
├─ Header (Context 사용)
├─ Product (Context 사용)
└─ CartModal
└─ Cart (Context 사용)