오늘은 class-variance-authority (CVA)를 사용하여 재사용 가능한 UI 컴포넌트를 만드는 방법을 학습했습니다. CVA는 다양한 스타일 변형을 정의하고 조합할 수 있는 유틸리티 라이브러리로, Tailwind CSS와 같은 스타일링 프레임워크와 잘 어울립니다.
예제 코드
import { cva } from "class-variance-authority";
const button = cva(["font-semibold", "border", "rounded"], {
variants: {
intent: {
primary: [
"bg-blue-500",
"text-white",
"border-transparent",
"hover:bg-blue-600",
],
secondary: [
"bg-white",
"text-gray-800",
"border-gray-400",
"hover:bg-gray-100",
],
},
size: {
small: ["text-sm", "py-1", "px-2"],
medium: ["text-base", "py-2", "px-4"],
},
},
compoundVariants: [
{
intent: "primary",
size: "medium",
class: "uppercase",
},
],
defaultVariants: {
intent: "primary",
size: "medium",
},
});
button();
// => "font-semibold border rounded bg-blue-500 text-white border-transparent hover:bg-blue-600 text-base py-2 px-4 uppercase"
button({ intent: "secondary", size: "small" });
// => "font-semibold border rounded bg-white text-gray-800 border-gray-400 hover:bg-gray-100 text-sm py-1 px-2"
주요 개념
- Variants 정의
- variants 옵션을 사용하여 컴포넌트의 다양한 변형을 정의합니다. 예를 들어, intent와 size를 정의하여 버튼의 색상과 크기를 설정합니다.
- Compound Variants
- compoundVariants 옵션을 통해 여러 변형이 결합될 때 적용할 스타일을 정의할 수 있습니다.
- Default Variants
- defaultVariants 옵션을 사용하여 기본 변형 값을 설정할 수 있습니다.
참고 사이트
'TIL' 카테고리의 다른 글
TIL - 리액트 훅과 가상 DOM의 상호작용 (0) | 2024.07.05 |
---|---|
TIL - 무한 스크롤 데이터 요청 중 깜빡임 제거 (0) | 2024.07.04 |
TIL - 북마크된 영화 목록 기능 구현을 위한 고민과 해결 방안 (0) | 2024.07.02 |
TIL - Next.js&supabase에서 createClient Vs. createServerComponentClient (0) | 2024.07.01 |
TIL - TanStack Query 무한 스크롤 커스텀 훅 리팩토링 (0) | 2024.06.29 |