Shadcn Finally Has MultiSelect!
- Shadcn 라이브러리에 없는 MultiSelect 컴포넌트를 직접 구현하고 Shadcn 스타일로 작동하도록 만듦 🛠️
- Popover와 Command 컴포넌트를 결합하여 MultiSelect 구현, Radix 라이브러리 참고 💡
- Context API를 사용하여 MultiSelect 컴포넌트 내부의 상태를 관리하고 자식 컴포넌트에서 접근 가능하게 함 📦
- use effect 훅을 사용하여 MultiSelect 아이템이 렌더링될 때마다 해당 아이템의 정보를 수집하고 관리 🎣
- display: none 스타일을 가진 div를 사용하여 MultiSelect 아이템이 렌더링되기 전에도 use effect 훅이 실행되도록 함 👻
- MultiSelect 값 표시 영역에서 텍스트가 넘치는 경우를 처리하기 위해 스크롤 너비와 클라이언트 너비를 비교하여 넘침 여부를 판단하고, 넘치는 텍스트를 숨기는 방식으로 구현 📏
- 렌더링 최적화를 위해 처음에는 모든 요소를 숨긴 다음, 하나씩 다시 추가하면서 넘침 여부를 확인하고 넘치는 요소만 숨기는 방식을 사용 🔄
- MultiSelect 컴포넌트의 스타일을 Shadcn 스타일과 최대한 유사하게 맞춤 🎨
- 사용자 경험을 개선하기 위해 다양한 사용자 정의 옵션(custom badges, wrapping)을 제공 🎁
- MultiSelect 구현 과정에서 Radix 라이브러리의 동작 방식을 깊이 이해하고, 이를 활용하여 Shadcn 스타일의 컴포넌트를 만듦 📚