지난 번 앱잼 기간동안 만들었던 select 버튼 커스텀한 것의 코드가 수정되어서 다시 올리게 되었다.
1) recoil의 state, type 설명과 사용된 곳 설명
2) 기능 단위로 코드 설명
isOpen이나 isSelected와 같은 상태들을 recoil로 관리하게 되었다.
dropdown item선택하면 api 연결하기 구현,
- 각 선택된 정렬 기준에 따라 api의 파람으로 넘겨서 데이터를 받아와야 했는데, type문제가 있어서 enum으로 해결하였다.
선택한 기준이 정렬 기준(criteria) 옆에 | 와함께 들어가게 변경.
위에 카테고리가 선택되지 않았을 때 disabled 처리하기 구현
일단 해당 버튼 구현을 위해 사용된 state와 type을 정리해보앗습니다.
파일 구조는 SoringBox 안에서 SortingBtn이 map으로 반복됩니다.
velog코드가 가독성이 안좋아서 캡쳐된 이미지를 넣습니다.
리코일 state와 type지정
정렬 기준은 다섯가지가 있었다.
지금보니 굳이 안에 정렬버튼 안에 들어갈 문자열의 타입을 저렇게 좁힐 이유가 있을까 싶다.
isOpenState는 true면 dropdown리스트가 열리고, false면 닫히게 하도록 사용된다.
isOpenDefault는 셀렉트 버튼 중 한 버튼만 열려야 하기 때문에 switch문에서 선택한 버튼을 제외한 버튼들은 모두 닫아주기 위해 사용되었다.
점점 변수가 많아지면서 변수명이 헷갈리기 시작한다...
주석을 자세하게 달지 않아도 한눈에 이해가 갈 수 있게 가독성 좋은 변수명..절실함...
지금 생각하면 isSelected를 굳이 만들어야했을까? 싶다. 빈문자열이면 falsy한 값이고, 문자열은 truthy한 값이기 때문에 굳이 boolean 타입의 value를 갖는 object를 만들지 않아도 되었을 것 같다.
파일별로 작성하고자 했는데, 글 가독성이 안좋아보여서 기능 구현단위로 작성합니다!
일단 글이 길어져서 이어서...