cva(class-variance-authority)
2025๋ 3์ 13์ผ
cva๋ class-variance-authority์ ์ฝ์์ด๋ฉฐ, Tailwind CSS ์ฌ์ฉ์๋ค์ด ๋์ ํด๋์ค ์กฐํฉ์ ๊น๋ํ๊ณ ํ์ ์์ ํ๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฃผ๋ก ๋ฒํผ, ๋ฑ์ง, ์นด๋ ๊ฐ์ ์ปดํฌ๋ํธ์์ variant, size, disabled ๊ฐ์ **์์ฑ(variant)**์ ๋ฐ๋ผ className์ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑ
ย
ย
์ฅ์
- ํ์
์์
- ์๋ชป๋ ๊ฐ์ ๋ฃ์ผ๋ฉด TypeScript ์๋ฌ๋ฅผ ๋ฐ์์์ผ์ค
- ์ค๋ณต ์ ๊ฑฐ
- base๋ฅผ ๊ธฐ์ค์ผ๋ก variant, size๋ณ๋ก ์ถ๊ฐ ์คํ์ผ์ ์ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ค์ผ ์ ์์.
- ์ ์ง๋ณด์๊ฐ ์ฌ์
- ์ ์ฒด์ ์ธ ์คํ์ผ์ ๋ฐ๊ฟ๋๋ base ์คํ์ผ์ ์์ ํ๋ฉด ๋๊ณ ํน์ variant๋ size๋ฅผ ์์ ํ๊ธฐ๋ ์ฌ์
ย
์ค์น
npm install class-variance-authority
ย
์ฌ์ฉ ๋ฐฉ๋ฒ
import { cva } from "class-variance-authority";
const button = cva("px-4 py-2 font-semibold rounded", {
variants: {
variant: {
primary: "bg-blue-500 text-white",
secondary: "bg-gray-300 text-black",
},
size: {
sm: "text-sm",
md: "text-md",
lg: "text-lg",
},
},
defaultVariants: {
variant: "primary",
size: "md",
},
});
ย