React

[TIL/React] 2023/10/05

๋ฐ˜์‘ํ˜• ๐ŸŸขpx(ํ”ฝ์…€)๊ณผ ๊ฐ™์€ ๊ณ ์ • ๋‹จ์œ„๋ฅผ ์“ฐ๋ฉด ์œ„์™€ ๊ฐ™์ด ์ฒ˜์ฐธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.์ˆ˜์ • ํ›„ ๋ชจ์Šต ๐ŸŸข์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•œ๋ฐ, ์˜ค๋Š˜์€ ๋„์ €ํžˆ ํž˜์ด ๋‚˜์ง€ ์•Š๋Š”๋‹ค. handleDirectClick ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด, ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด logi

2023๋…„ 10์›” 5์ผ2min read

๋ฐ˜์‘ํ˜• ๐ŸŸข

px(ํ”ฝ์…€)๊ณผ ๊ฐ™์€ ๊ณ ์ • ๋‹จ์œ„๋ฅผ ์“ฐ๋ฉด ์œ„์™€ ๊ฐ™์ด ์ฒ˜์ฐธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

code
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) ๊ทธ๋ž˜๋„ ๋Œ€๊ฐ• ๊ตฌ์กฐ๋ฅผ ์žก์•˜์œผ๋‹ˆ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ์Šฌ์Šฌ ๋งŒ๋“ค๋„๋ก ํ•˜์ž.

More to read

AI

AI&ML ๊ธฐ์ดˆ

Reference: https&#x3A;//bettermesol.github.io/ml/2019/09/16/ai-ml-dl/AI: ๊ธฐ๊ณ„๊ฐ€ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ  ํŒ๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ๋„“์€ ๋ฒ”์ฃผ์˜ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.ML: ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ•˜์—ฌ ์Šค์Šค๋กœ ๊ทœ์น™์„ ์ฐพ์•„๋‚ด๋Š” AI์˜ ํ•œ ๋ถ„์•ผ๋กœ,

'AI Agent Economy'

Novitas : AI Agent๊ฐ€ ์ง€๊ฐ‘์„ ๊ฐ€์ง€๋Š” ์„ธ์ƒ

์–ผ๋งˆ ์ „, ๋ฏธ๋ž˜์—์…‹์ฆ๊ถŒ ๋ฆฌ์„œ์น˜ ๋ฆฌํฌํŠธ(์˜ฌํ•ด๋Š” ์ด๋”๋ฆฌ์›€์ด๋‹ค: ์—์ด์ „ํŠธ ์‹œ๋Œ€์˜ Near Automata)๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. AI Agent๋ฅผ ์ธ๊ฐ„๊ณผ ํ•จ๊ป˜ํ•  ๊ฒฝ์ œ ์ฃผ์ฒด๋กœ ๋ฐ”๋ผ๋ณด๋Š” ์‹œ๊ฐ์— ์ ์ž–์ด ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜๋”๋žฌ์ฃ .ํ•œ ๊ฐ€์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ 'AI'

'ERC-8004'

Novitas: AI ์—์ด์ „ํŠธ ๊ฒฝ์ œ ์ฃผ์ฒด

Web 4.0์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •์˜ํ•˜๋ฉด Sovereign Transact์ž…๋‹ˆ๋‹ค.AI๊ฐ€ ์ธ๊ฐ„์˜ ํ—ˆ๋ฝ ์—†์ด ์ง€๊ฐ‘์„ ์†Œ์œ ํ•˜๊ณ , ๊ฒฐ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ธํ”„๋ผ๋ฅผ ํ†ต์ œํ•˜๋Š” ์ฃผ๊ถŒ์  ๊ฒฝ์ œ ์ฃผ์ฒด๊ฐ€ ๋˜๋Š” ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค. Web 3.0์ด ๋ธ”๋ก์ฒด์ธ ๊ธฐ๋ฐ˜์˜ ํƒˆ์ค‘์•™ํ™”๋ฅผ ์‹คํ˜„ํ–ˆ๋‹ค๋ฉด, Web 4.0์€ ๊ทธ