[TIL/React] 2023/09/13
쇼핑하기 페이지 추가 🟢antibioFree를 통해 subtitle에 '무항생제'가 포함된 경우, 해당 제품명의 색을 green으로 변경하는 로직을 추가했다.이미지에 마우스를 갖다 대면 호버를 통해 이미지 배경이 검정색으로 변한다. 고기가 상당히 고급져보이는 효과가
쇼핑하기 페이지 추가 🟢
import React, { useState } from "react";
import styled from "@emotion/styled";
const ProductWrapper = styled.div`
width: calc(33.3% - 20px);
margin: 10px;
`;
const ProductImgWrapper = styled.div`
background-color: rgb(249, 247, 248);
width: 100%;
height: 400px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 16px;
box-shadow: 0px 10px 8px #999;
&:hover {
background-color: black;
}
`;
const ProductImage = styled.img`
width: 100%;
height: auto;
`;
const ProductInfoTitle = styled.p`
font-weight: bolder;
font-size: 25px;
color: ${(props) => (props.antibioFree ? "green" : "none")};
`;
const ProductInfoEtc = styled.p`
color: #9b9b9b;
font-weight: bolder;
`;
const ModalOverlay = styled.div`
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
`;
const ModalContent = styled.div`
width: 1000px;
background: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
text-align: center;
`;
const PurchaseButton = styled.button`
background-color: black;
color: white;
cursor: pointer;
font-size: 20px;
border-radius: 10px;
padding: 10px 20px;
transition: background-color 0.3s, color 0.3s, border 0.3s;
border: 2px solid black;
&:hover {
background-color: white;
color: black;
}
`;
const CommonCard = ({ data = {}, type = "A" }) => {
const antibioFree = data?.subtitle?.includes("무항생제");
const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => {
setIsModalOpen(true);
};
const closeModal = () => {
setIsModalOpen(false);
};
return (
<ProductWrapper key={data?.id}>
{/* image */}
<ProductImgWrapper onClick={() => openModal()}>
<ProductImage src={data?.image} />
</ProductImgWrapper>
{/* title case */}
<div>
{type === "A" ? (
<ProductInfoTitle antibioFree={antibioFree}>
{data?.subtitle}
</ProductInfoTitle>
) : (
<ProductInfoTitle antibioFree={antibioFree}>
{data?.title}
</ProductInfoTitle>
)}
{/* product price & weight */}
<ProductInfoEtc>
{data?.price} / {data?.weight}
</ProductInfoEtc>
</div>
{/* modal */}
{isModalOpen && (
<ModalOverlay onClick={() => closeModal()}>
<ModalContent>
<h2>상품 정보</h2>
<div>
<p>{data?.subtitle}</p>
<p>
{data?.price} / {data?.weight}
</p>
</div>
<PurchaseButton onClick={() => closeModal()}>
{data?.subtitle}을 구매하시겠습니까?
</PurchaseButton>
</ModalContent>
</ModalOverlay>
)}
</ProductWrapper>
);
};
export default CommonCard;
antibioFree를 통해 subtitle에 '무항생제'가 포함된 경우, 해당 제품명의 색을 green으로 변경하는 로직을 추가했다.
이미지에 마우스를 갖다 대면 호버를 통해 이미지 배경이 검정색으로 변한다. 고기가 상당히 고급져보이는 효과가 생겼다.
isModalOpen이라는 상태와 해당 상태에 필요한 toggle 함수를 만들었다. modal을 띄우는 것이 목적이었다. 지금은 구매 버튼을 클릭하면 modal이 꺼진다.
modal까지 공용 카드의 요소로 봐야하는가에 대한 의문이 생겼다. 고민을 좀 해야겠다.
진행 🟢
호버

모달

모달 호버

회고~~는 아니고 대충 내일 계획~~ 🟢
1. 선형대수 관련, ~~대충~~ 정성을 다해 듣기 2. R 관련, ~~대충~~ 정성을 다해 듣기 3. ANOVA 관련, ~~대충~~ 정성을 다해 공부 4. Auth data 활용, 로그인 이후 AppBar UI 변경
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니