[TIL/React] 2023/10/05

원민관·2023λ…„ 10μ›” 5일
0

[TIL]

λͺ©λ‘ 보기
119/159

λ°˜μ‘ν˜• 🟒

px(ν”½μ…€)κ³Ό 같은 κ³ μ • λ‹¨μœ„λ₯Ό μ“°λ©΄ μœ„μ™€ 같이 μ²˜μ°Έν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€. μ½”λ“œλ₯Ό μˆ˜μ •ν–ˆλ‹€.

import React from "react";
import { useParams, useLocation, useNavigate } from "react-router-dom";
import styled from "@emotion/styled";
import { shoppingData } from "../data/ShoppingCategory_Pork";
import ComponentWrapper from "../components/common/ComponentWrapper";
import { useSelector } from "react-redux";

const ProductDetailPageBackgroundStyle = styled.div`
  background-color: #181818;
  width: 100%;
  /* height: 100vh; */
`;

const AllContentWrapper = styled.div`
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100vh;
  /* flex-grow: 1; */
  /* background-color: white; */
  @media (max-width: 900px) {
    flex-wrap: wrap;
    column-gap: 20px;
  }
`;

const ProductDetailPageImgWrapper = styled.div`
  /* height: 70%;
  width: 50%; */
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: white;
`;

const ProductImg = styled.img`
  width: 80%;
  height: 80%;
`;

const ProductDetailPageInfoWrapper = styled.div`
  /* width: 50%;
  height: 70%; */
  display: flex;
  flex-direction: column;
  background-color: blue;
`;

const ProductDetailPageInfoDataWrapper = styled.div`
  height: 30%;
`;

const InfoDataTitle = styled.p`
  font-size: 30px;
  color: white;
  font-weight: bolder;
`;

const InfoDataEtc = styled.p`
  font-size: 20px;
  color: white;
  font-weight: bolder;
`;

const OptionWrapper = styled.div`
  display: flex;
  align-items: center;
  column-gap: 20px;
  height: 20%;
  color: white;
`;

const AmountWrapper = styled.div`
  display: flex;
  align-items: center;
  column-gap: 20px;
  height: 20%;
  color: white;
`;

const ButtonWrapper = styled.div`
  width: 100%;
  background-color: orange;
  display: flex;
  height: 30%;
  justify-content: space-evenly;
  align-items: center;
`;

const ProductDetailPage = () => {
  const navigate = useNavigate();
  const { id } = useParams();
  const location = useLocation();
  const category = location?.state;
  const check = useSelector((state) => state.auth);
  console.log(check);

  const handleDirectClick = () => {
    if (check.isAuthenticated) {
      console.log("κ²°μ œν™”λ©΄μœΌλ‘œ");
    } else {
      navigate("/login");
    }
  };

  const MapData = shoppingData[category];
  const DetailData = MapData.find((elem) => elem?.id === id);
  const ImgSrc = DetailData.image;

  console.log(location);
  console.log(DetailData);
  console.log(ImgSrc);

  return (
    <>
      <ProductDetailPageBackgroundStyle>
        {/*  */}
        <ComponentWrapper style={{ height: "100%" }}>
          <AllContentWrapper>
            {/* image area */}
            <ProductDetailPageImgWrapper>
              <ProductImg src={ImgSrc} />
            </ProductDetailPageImgWrapper>
            {/* info area */}
            <ProductDetailPageInfoWrapper>
              <ProductDetailPageInfoDataWrapper>
                <InfoDataTitle>{DetailData?.subtitle}</InfoDataTitle>
                <InfoDataEtc>
                  {DetailData?.price} ({DetailData?.weight})
                </InfoDataEtc>
                <p></p>
              </ProductDetailPageInfoDataWrapper>

              <OptionWrapper>
                <span style={{ color: "white", fontWeight: "bolder" }}>
                  μ˜΅μ…˜
                </span>
                <div style={{ border: "2px solid orange" }}>
                  fdsagfagfdagfdgfda
                </div>
              </OptionWrapper>
              <AmountWrapper>
                <span style={{ color: "white", fontWeight: "bolder" }}>
                  μˆ˜λŸ‰
                </span>
                <div style={{ border: "2px solid orange" }}>
                  fdsagfagfdagfdgfda
                </div>
              </AmountWrapper>

              <ButtonWrapper>
                <button
                  style={{
                    backgroundColor: "#7f7776",
                    color: "white",
                    width: "200px",
                    height: "60px",
                    border: "none",
                  }}
                  onClick={handleDirectClick}
                >
                  λ°”λ‘œκ΅¬λ§€
                </button>
                <button
                  style={{
                    backgroundColor: "#c50f22",
                    color: "white",
                    width: "200px",
                    height: "60px",
                    border: "none",
                  }}
                >
                  μž₯λ°”κ΅¬λ‹ˆ
                </button>
              </ButtonWrapper>
            </ProductDetailPageInfoWrapper>
          </AllContentWrapper>
        </ComponentWrapper>
      </ProductDetailPageBackgroundStyle>
    </>
  );
};

export default ProductDetailPage;

μˆ˜μ • ν›„ λͺ¨μŠ΅ 🟒

μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…이 ν•„μš”ν•œλ°, μ˜€λŠ˜μ€ λ„μ €νžˆ 힘이 λ‚˜μ§€ μ•ŠλŠ”λ‹€. handleDirectClick ν•¨μˆ˜λ₯Ό 톡해, 둜그인이 λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ login page둜 μ΄λ™ν•˜λ„λ‘ μ„€μ •ν–ˆλ‹€.

회고 🟒

1) μƒλŒ€μ μΈ λ‹¨μœ„λ₯Ό 써야 봉변을 λ©΄ν•  수 μžˆλ‹€λŠ” 점을 κΉ¨λ‹¬μ•˜λ‹€.
2) 1λ²ˆμ€ 사싀 이미 μ•Œκ³  μžˆμ—ˆλŠ”λ°, container λ‹¨μœ„λ‘œ μƒλŒ€ λ‹¨μœ„λ₯Ό 써야 함을 λ‹€μ‹œκΈˆ κΉ¨λ‹¬μ•˜λ‹€.
3) λ¬Έμ œλŠ” 2λ²ˆμ—μ„œ λŠλ‚€ 점이 λ§žλŠ” 것인지 μ˜λ¬Έμ΄λ‹€.
4) κ·Έλž˜λ„ λŒ€κ°• ꡬ쑰λ₯Ό μž‘μ•˜μœΌλ‹ˆ, μž₯λ°”κ΅¬λ‹ˆλ₯Ό 슬슬 λ§Œλ“€λ„λ‘ ν•˜μž.

profile
Write a little every day, without hope, without despair ✍️

0개의 λŒ“κΈ€