CartPage ์์ ๐ข
detail page์ ์๋ ๋ด์ฉ์ด๋ค. ๋ฐ๋ก๊ตฌ๋งค๋ฅผ ํด๋ฆญํ๋ฉด ๊ฐ์ฅ ๋จผ์ if ๋ฌธ์ ํตํด ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค. ๋ก๊ทธ์ธ์ด ๋์ด ์์ง ์์ ์ํ๋ผ๋ฉด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๊ณ , ๋ก๊ทธ์ธ์ด ์๋ฃ๋ ์ํ๋ผ๋ฉด ์ผํ์นดํธ ํ์ด์ง๋ก ์ด๋ํ๋ค. ์ด๋ ์ด๋์ ์์ dispatch๋ฅผ ํตํด DetailData์ category key๋ฅผ ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ getCartData๋ผ๋ ์ก์ ํจ์๋ก ์ ๋ฌํ๊ฒ ๋๋ค.
CartPage ๐ข
์์ญ์ ํฌ๊ฒ ์ธ ํํธ๋ก ๊ตฌ์ฑ๋๋ค. (์ ๋ชฉ, ๋ฐ์ดํฐ, ์ดํฉ)์ด ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค.
dataArea์ totalDataArea๊ฐ componentWrapper ๋ด๋ถ์์ 3๋ 1์ ๋น์จ๋ก ์์ญ์ ์ฐจ์งํ๊ณ ์๋ค.
dataArea๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค.
์ํ์ ๋ณด, ์๋, ๊ฐ๊ฒฉ์ด ๊ธฐ์ฌ๋ ์ฒซ ๋ฒ์งธ ํ์ ๋น์จ๊ณผ ๋์ผํ๊ฒ, ํ๋จ์ ์ถ๊ฐ๋ ๋ฐ์ค์ ๋น์จ์ ์กฐ์ ํ ๋ชจ์ต์ด๋ค. ์ธ ์์ญ์์๋ useSelector๋ฅผ ํตํด ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
์ ์ฝ๋๋ ํ์ฌ๋ก์ ๊ฐ์ฅ ๋ฌธ์ ๊ฐ ๋ง์ ๋ถ๋ถ์ด๋ค. ์๋์ ๋ฐ๋ฅธ ๊ฐ๊ฒฉ์ ์ดํฉ์ ๋ณด์ฌ์ค์ผ ํ๋ค.
import React, { useState } from "react";
import { useDispatch } from "react-redux";
import styled from "styled-components";
import { calElemTotalPrice } from "../../modules/cartSlice";
import { shoppingData } from "../../data/ShoppingCategory_Pork";
import { useLocation } from "react-router-dom";
import { useParams } from "react-router-dom";
import { splitPrice } from "../../utils/commonModule";
const CounterContainer = styled.div`
display: flex;
align-items: center;
`;
const Button = styled.button`
padding: 10px 20px;
font-size: 1.5em;
`;
const Display = styled.div`
padding: 10px;
font-size: 1.5em;
margin: 0 20px;
`;
const Counter = () => {
const [count, setCount] = useState(1);
const { id } = useParams();
const dispatch = useDispatch();
const location = useLocation();
const category = location?.state;
const MapData = shoppingData[category];
const DetailData = MapData?.find((elem) => elem?.id === id);
const purePrice = splitPrice(DetailData?.price);
const elemTotalPrice = purePrice * (count + 1);
const updateCount = (st) => {
dispatch(calElemTotalPrice(st));
};
const handleIncrement = () => {
setCount((prevCount) => prevCount + 1);
};
const handleDecrement = () => {
if (count > 1) {
setCount((prevCount) => prevCount - 1);
}
};
return (
<CounterContainer>
<Button
onClick={() => {
updateCount(elemTotalPrice);
handleDecrement();
}}
>
-
</Button>
<Display>{count}</Display>
<Button
onClick={() => {
updateCount(elemTotalPrice);
handleIncrement();
}}
>
+
</Button>
</CounterContainer>
);
};
export default Counter;
์์์ total price๋ฅผ ๊ตฌํด์ updateCount๋ผ๋ ์ก์ ํจ์์ ์ ๋ฌํ๊ณ , ํด๋น ๊ฐ์ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค๋ ๋ ผ๋ฆฌ์ด๋ค. ๋ฌธ์ ๋ category๋ณ๋ก ์ ๊ทผํ์ง ์์์ ๋๋จธ์ง ์์๋ค์ ๊ฐ๊ฒฉ์ด ๋์ผํ๊ฒ ๋ํ๋๋ค. ๋ฌด์จ ๋ง์ผ๊น?
๊ทธ์ ์๋ง์ด๋ผ๋ ์๋ฆฌ๋ค. ๋ด์ผ์ ์ด ๋ถ๋ถ๋ถํฐ ํด๊ฒฐํ๊ฒ ๋ค.