규모가 커지고 구조가 복잡해지면 문제 발생
return (
<Router>
<Nav cartItems= {cartItems}/>
<Routes>
<Route path="/" element={<ItemListContainer items={items} cartItems={cartItems} setCartItems={setCartItems} />} />
<Route
path="/shoppingcart"
element={<ShoppingCart cartItems={cartItems} items={items} setCartItems={setCartItems}/>}
/>
</Routes>
<img
id="logo_foot"
src={`${process.env.PUBLIC_URL}/codestates-logo.png`}
alt="logo_foot"
/>
</Router>
);
function Nav({ cartItems }) {
return (
<div id="nav-body">
<span id="title">
<img id="logo" src="../logo.png" alt="logo" />
<span id="name">CMarket</span>
</span>
<div id="menu">
<Link to="/">상품리스트</Link>
<Link to="/shoppingcart">
장바구니<span id="nav-item-counter">{cartItems.length}</span>
</Link>
</div>
</div>
);
}
function ItemListContainer({ items, cartItems, setCartItems }) {
const handleClick = (e, id) => {
let existedItem = cartItems.slice();
let doesHaveItem = cartItems.findIndex(el => el.itemId === id);
if(doesHaveItem === -1) {
setCartItems([...existedItem, {"itemId": id, "quantity": 1}]);
}else {
existedItem[doesHaveItem].quantity++;
setCartItems(existedItem);
}
}
return (
<div id="item-list-container">
<div id="item-list-body">
<div id="item-list-title">쓸모없는 선물 모음</div>
{items.map((item, idx) => <Item item={item} key={idx} handleClick={handleClick} />)}
</div>
</div>
);
}
export default function ShoppingCart({ items, cartItems, setCartItems }) {
// 생략
}
const handleQuantityChange = (quantity, itemId) => {
setCartItems(cartItems.map(el => {
if(el.itemId === itemId) {
return {
"itemId" : itemId,
"quantity" : quantity
}
}else {
return el
}
}));
}
const handleDelete = (itemId) => {
setCheckedItems(checkedItems.filter((el) => el !== itemId));
setCartItems(cartItems.filter(el => el.itemId !== itemId));
}