모든 React 컴포넌트 라이브러리에 작은 cn() 헬퍼 있어. 어디서나 같은 두 줄. 존재 이유 알면 본인 부서진 버전 안 발명하게 돼.
cn() 이 푸는 두 문제
- 조건부 클래스 — 가끔
className="px-4 py-2 disabled:opacity-50"원하고, prop 설정될 때만 추가 클래스. Naive template literal 은 빠르게 추해짐. - 호출자 override — 본인
Button이 내부에서className="px-4"설정, 호출자가className="px-6"전달, 둘 다 DOM 에px-4 px-6으로 land, Tailwind cascade 가 둘째로 로드된 거 고름. 호출자 의도 조용히 잃음.
두 라이브러리
- clsx — 조건부 + array/object 클래스 합성 처리. 문자열, 배열, `{ [class]: condition }` 객체의 어떤 조합도 받고 깔끔한 공백 구분 문자열 반환.
- tailwind-merge — Tailwind 문법 알아. 충돌 유틸리티 둘 (
px-4와px-6) 주면 마지막 거 유지.
합치면 cn() — 캐논 헬퍼.
cn() 쓰는 자리
src/lib/cn.ts 에 한 번. 모든 컴포넌트 import. cwkPippa 의 tailwind-merge (package.json) 가 정확히 이거 위한 거 — 채팅 UI, sidebar, council, admin 패널 전반에 쓰는 단일 cn().
클래스 문자열을
+ 또는 template literal 로 concat 중이면 cn() 을 잘못 재발명 중. 두 함수 작고, 잘 테스트 됨, 서로 의존성 0. 둘 다 설치하고 넘어가.