Numble 다른 색깔 찾기 게임 제작 챌린지
Numble에서 진행하는 [React] 다른 색깔 찾기 게임 제작 챌린지
에 참여하였다.
핵심 로직
여러 상태를 관리하기 위해 useReducer를 사용하였다.
useInterval Hook을 정의하여 setInterval의 timer가 React의 state에 맞춰서 작동하도록 하였다.
난이도가 올라갈 수록 어려운 색이 나오도록 하였다.
- 15스테이지까지는 정답색의 r,g,b값 중 b값과 투명도를 조절하였다.
- 15~30 스테이지까지는 정답색의 투명도를 0.8로 고정하였다.
- 30이상의 스테이지에서는 정답색의 투명도를 0.9로 하였다.
활용한 라이브러리와 그 이유
React.js
를 사용하였다.Next.js
로 작성하였으나Next.js
는 Univasal Rendering으로 첫 페이지를 SSR로 렌더링하여 첫 렌더링시 정답 블럭과 정답 색의 불일치가 발생하였다.
때문에 완성본을React.js
로 다시 작성하였다.
@emotion/styled
라이브러리를 사용하였다.- grid를 잘 사용해보지 않아서
calc
를 통해 블록당 width를 계산하도록 하였다.
- grid를 잘 사용해보지 않아서
프로젝트를 진행할 때 어려웠던 점
데모 버전을 살펴보았는데, 모든것이 시간 기준이라 시간만 state로 관리하고 나머지는 useRef나 useMemo를 이용하여 관리할 수 있다고 생각이 되었다.
- 이를 예전에 다 구현을 해두었으나 위에서 언급한
Next.js
의 렌더링 방식으로 인해 첫 렌더링시 정답 블럭과 정답 색의 불일치가 발생하였다. - 이 이슈 해결이 제일 어려웠는데 SSR에 대한 로직이나 플러그인을 설치하는 것 보다
React.js
로 옮기는 것이 확실하다고 생각되어 옮겼다.
- 이를 예전에 다 구현을 해두었으나 위에서 언급한
위에서 언급한 이슈해결에 대해서 고민하다가 넘블 챌린지 공고를 다시 한 번 보았다.
- 공고를 살펴보던 도중
useReducer
라는 Hook이 있다는 것을 알게 되었고, 도입하는 것이 코드를 훨씬 깔끔하게 작성할 수 있다고 생각이 들어서 도입하였다.useReducer
를 사용하여 컴포넌트 본문의 길이를 줄이고 가독성 좋은 코드로 수정할 수 있었다.
- 공고를 살펴보던 도중
마무리
리액트의 state에 대해 더 잘 알 수 있어서 유익했다.
또한 상태관리 라이브러리를 사용하지 않고 useReducer라는 Hook을 알게되고 활용 해보아서 좋았다..!