Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Vite
- SSR
- 이벤트루프
- NextJS
- 소셜 로그인
- 원시값
- github
- FormData
- TypeScript
- 신진 디자이너
- React
- webpack
- Recoil
- 동기/비동기
- JS
- FileReader
- Module
- 우테코
- 프론트엔드
- Front-End
- 카카오 로그인
- nodejs
- Git
- useContext
- 절대경로?
- 객체값
- slack
- 최재영
- 우아한테크코스
- 멋쟁이 사자처럼 in CAU
Archives
- Today
- Total
REturn 0;
별점기능 구현하기 본문
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라면 회색을 칠함
'해커톤' 카테고리의 다른 글
이미지 업로드 및 폼 데이터로 전송하기 (0) | 2023.09.10 |
---|---|
이미지 import없이 경로 설정하기 (0) | 2023.08.23 |
페이지가 렌더링되면 스크롤을 맨 위로 올리기 (0) | 2023.08.22 |
커스텀 hook을 이용해 입력값 저장하기 (0) | 2023.08.22 |
useEffect로 useParams에 해당하는 정보를 습득하고 오류 해결 (0) | 2023.08.22 |