해커톤
별점기능 구현하기
zza.___.lng
2023. 8. 22. 18:58
import React, { useState } from "react";
import styled from "styled-components";
const StarRate = ({ onChange }) => {
const [rate, setRate] = useState(0);
const handleStarClick = (select) => {
setRate(select);
onChange(select);
};
return (
<StarContainer>
{[1, 2, 3, 4, 5].map((star) => (
<Star
key={star}
filled={star <= rate}
onClick={() => handleStarClick(star)}
>
★
</Star>
))}
</StarContainer>
);
};
export default StarRate;
const StarContainer = styled.div`
display: inline-block;
`;
const Star = styled.span`
font-size: 24px;
color: ${({ filled }) => (filled ? "gold" : "lightgray")};
cursor: pointer;
`;
1. onChange()를 props로 받아옴
부모 컴포넌트에서 useForm을 사용한 onChange함수 ➡️ 선택한 별점 값을 선언한 변수에 저장
2. handleStarClick()
별을 선택했을 때 실행되는 함수 해당 컴포넌트에서의 rate값과 부모 컴포넌트에서의 rate값을 onChange함수를 받아와서 저장
3. star 컴포넌트
1~5까지의 숫자가 담긴 배열을 map함수를 이용해 <star>컴포넌트를 렌더링, filled 속성으로 선택한 별점보다 작거나 같으면 true를 반환하여 3을 선택하면 3개의 별이 칠해지도록 구현
4. onClick()
★을 누르면 handleStarClick()함수 실행
5. color: ${({ filled }) => (filled ? "gold" : "lightgray")};
filled를 props로 받아서 해당 컴포넌트의 filled속성이 true라면 노란색을 칠하고, false라면 회색을 칠함