230812 ant design을 쓰면서 느낀 점
이번 프로젝트에서는 공용 컴포넌트를 따로 만들지 않고 UI 라이브러리를 사용하기로 했다. MUI와 Ant Design에서 고민하던 중 Ant Design의 작은 크기의 Calendar이 마음에 들어 Ant Design을 선택했다.
Ant Design을 사용하기 시작하면서 Button같이 단순한 컴포넌트는 사용하기 어렵지 않았다. 문제는 Select와 같은 복잡한 컴포넌트였다. Ant Design은 선택할 수 있는 값을 options라는 props로 받는다. 반면 MUI는 children을 통해 MenuItem을 받는다. 하위 요소가 노출되어 있는 MUI에 반해 Ant 에서는 볼 수가 없는데, Select 컴포넌트의 Option 요소를 커스텀마이징하려 했을 때 숨겨져 있어 처음에 어떻게 건들여야 하나 의문점이 생긴다.
//Ant Design
<Select
defaultValue={30}
options={[
{ value: 10, label: 'Ten' },
{ value: 20, label: 'Twenty' },
{ value: 30, label: 'Thirty' }
]}
/>
//MUI
<Select
value={age}
label="Age"
onChange={handleChange}
>
<MenuItem value={10}>Ten</MenuItem>
<MenuItem value={20}>Twenty</MenuItem>
<MenuItem value={30}>Thirty</MenuItem>
</Select>
이와 비슷하게 Menu 컴포넌트에서는 getItem()이라는 함수를 통해 데이터의 형식을 잡아놓고 items라는 props를 통해 메뉴의 리스트를 받아서 렌더링한다. 위의 문제와 마찬가지로 렌더링되는 메뉴간의 깊이와 같은 정보를 한 번에 보기 어렵다. 좀 더 선언적이지 못하다는 느낌도 있고, 렌더링 되는 부분이 완전히 감추어져 커스텀마이징하기 조금 어려웠다
<Menu
onClick={onClick}
style={{ width: 256 }}
defaultSelectedKeys={['1']}
defaultOpenKeys={['sub1']}
mode="inline"
items={items}
/>
'내일배움캠프' 카테고리의 다른 글
230814 KPT 회고 (0) | 2023.08.14 |
---|---|
230813 내일배움캠프 13주차 WIL (0) | 2023.08.13 |
230810 React에서 FullCalendar 기본 사용법 (0) | 2023.08.10 |
230809 React Zustand Modal 전역 상태 관리하기 (0) | 2023.08.09 |
230808 useViewport()로 미디어 쿼리 없이 반응형 만들기 (0) | 2023.08.08 |