[React.js] 별점 기능 star rating (직접 구현)

2023. 4. 3. 13:37·Programming/React JS

오늘은 별점 기능(star rating)을 리액트로 구현하는 방법에 대하여 작성해보려고 한다 (੭˙ ˘ ˙)੭

학교에서 졸업 프로젝트를 진행하던 도중, 별점 기능을 넣어야하는 일이 생겼었는데 그 기능을 작성해보려고 한다.

특히, 이번엔 별점 기능을 기존 라이브러리를 사용하여 구현하는 것이 아닌 직접 구현을 해보게 되었다.

 

 

시작해봅시다 !

 


 

우선  UI는 아래와 같이 작성하였다.

우측 셀렉트 박스로 평점을 매기면 좌측에 별이 차오르도록 구현하였다.

 

star rating

 

셀렉트 박스를 0~5 사이를 0.5씩 나눈 <option> 태그를 넣어 만들어두었으며 setRating으로 value를 저장해두었다 !

 

// option value 값을 저장한다
const [rating, setRating] = useState();

<select onChange={(e) => setRating(e.target.value)}>
    <option value={0}>0</option>
    <option value={0.5}>0.5</option>
    <option value={1}>1</option>
    <option value={1.5}>1.5</option>
    <option value={2}>2</option>
    <option value={2.5}>2.5</option>
    <option value={3}>3</option>
    <option value={3.5}>3.5</option>
    <option value={4}>4</option>
    <option value={4.5}>4.5</option>
    <option value={5}>5</option>
</select>

 

 

값을 저장해두었다면 이 다음부터는 구현이 정말 쉽다 ! ٩( ᐛ )و 

반복문으로 value를 계산하여 배열에 해당하는 이미지를 담아 출력해주는 방식을 사용하였다.

 

우선, 출력해줄 이미지가 필요하다.

나는 아래의 세 가지 이미지를 사용하여 별점을 표현하였다.

 

사용한 별점 이미지

 

반복문을 사용하여 value 값 만큼 full color star 이미지를 배열에 push하고,

소수점 아래의 숫자가 있다면 half color star를 push 하였다.

그리고 남은 수만큼 empty star를 push 하여 배열을 출력하였다.

 

 

코드는 다음과 같다.

// 별점 이미지를 담을 배열
const starRating = [];

// user 가 선택한 value 만큼 full color star를 담는다.
for (let i = 1; i <= rating; i++) {
    starRating.push(
        <img src={"full color star 이미지 경로"} key={i} />,
    );
}

// 소수점 아래의 수가 있다면 half color star를 담는다.
if (rating % 1 > 0) {
    starRating.push(
        <img src={"half color star 이미지 경로"} />,
    );
}

// 5 에서 위의 출력 결과를 제외한 만큼의 empty star를 담는다.
for (let i = 1; i <= 5 - rating; i++) {
    starRating.push(
        <img src={"empty star 이미지 경로"} key={5 + i} />,
    );
}

 

배열에 담았다면 정말정말 다 한 것이다 !!

이제는 UI에 노출시키기만 하면 된다 ٩(๑❛ᴗ❛๑)۶  

 


나는 아래와 같이 작성하였다.

<div>
    {rating > 0 ? (
    	starRating
    ) : (
    <div>
        <img src={"empty star 이미지 경로"} />
        <img src={"empty star 이미지 경로"} />
        <img src={"empty star 이미지 경로"} />
        <img src={"empty star 이미지 경로"} />
        <img src={"empty star 이미지 경로"} />
        />
    </div>
    )}
</div>

user가 선택한 value 값이 0보다 크다면 배열에 담은 내용을 출력하고, 그렇지 않다면 empty star 이미지를 5개 출력하였다 !

 

 

아래는 실행화면을 녹화한 영상이다.

 

 

 

잘 작동하는 것을 확인 할 수 있다 !

star rating 직접 구현 성공 !!! ✧*。٩(ˊᗜˋ*)و✧*

 

 



💡 작성하면서 든 생각..

사실 map으로 구현하면 더 좋을 것 같았는데,
그렇게 크게 중요한 기능도 아니고 user에게 평점을 이미지로 보여주기 위한 정도라 for 문을 사용하여 구현하였다.
(큰 차이는 없겠지만 react로 하면 뭔가 map으로 하는게 맞는거 같은... 공부를 좀 더 해야겠다.)

 

+ select box도 커스텀하여 더 예쁘게 만들면 좋을 것 같다.
   또한 다음에는 마우스 커서에 따라 이미지를 클릭하여 별점을 매길 수 있도록 해보는 것도 좋을 것 같다 : )

 

더 좋은 구현 방법이 떠오른다면 추가작성 해야겠다 : )

아무튼 ! 오랜만에 포스팅 완료 。^‿^。

 

'Programming > React JS' 카테고리의 다른 글

[React.js] 이미지 업로드 기능 (feat. heic 파일)  (4) 2023.02.03
'Programming/React JS' 카테고리의 다른 글
  • [React.js] 이미지 업로드 기능 (feat. heic 파일)
__narrrrrmm
__narrrrrmm
낢__narrrrrmm 님의 블로그입니다.
__narrrrrmm
낢
__narrrrrmm
글쓰기 관리
전체
오늘
어제
  • 분류 전체보기 (71)
    • Programming (68)
      • Algorithm (61)
      • React JS (2)
      • SQL (5)
    • 낢의 하루 (1)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최소스패닝트리
백트레킹
파싱
누적합
알고리즘
다익스트라
그래프탐색
Javascript
StarRating
DP
백준
프로그래머스
PCCP
React.js
heic
mysql
투포인터
그래프
웹동아리
MST
삼성 금융아카데미
BFS
백트래킹
파이썬
Python
컬럼별칭
Dijkstra
다이나믹프로그래밍
DFS
SQL
hELLO· Designed By정상우.v4.5.3
__narrrrrmm
[React.js] 별점 기능 star rating (직접 구현)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.