Context
νλͺ©μ μ ννκΈ° μν΄ Radio μ»΄ν¬λνΈλ₯Ό μ¬μ©ν λκ° μλ€. μ΄ κΈμμλ shadcnμ radio-group μ»΄ν¬λνΈλ₯Ό μκ°νλ€.
Agenda
β’
shadcnμ radio-group μ»΄ν¬λνΈλ₯Ό λΆμνκ³ κ·Έ λ΄μ©μ μ΄ν΄νλ κ²μ λͺ©νλ‘ ν¨
Contents
RadioGroup
const RadioGroup = ({
className,
...props
}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) => {
return (
<RadioGroupPrimitive.Root
data-slot='radio-group'
className={cn('grid gap-3', className)}
{...props}
/>
);
};
TypeScript
볡μ¬
shadcnμ RadioGroup μ»΄ν¬λνΈλ radix-uiμ RadioGroupPrimitiveμ Root μ»΄ν¬λνΈλ₯Ό κ°μΈλ Wrapper ννλ‘ κ΅¬ν λλ€. radix-uiμ RadioGroupPrimitive Root μ»΄ν¬λνΈκ° μ¬μ©νλ propsλ₯Ό κ·Έλλ‘ λ겨주λ λ€λ¦¬λΌκ³ λ λ³Ό μ μμΌλ©° data-slot μμ±μ λΆμ¬νμ¬ DOM νμμ΄λ ν
μ€νΈμμ μλ³νκΈ°μ μ©μ΄νκ² νμλ€.
RadioGroupItem
const RadioGroupItem = ({
className,
...props
}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) => {
return (
<RadioGroupPrimitive.Item
data-slot='radio-group-item'
className={cn(
'peer border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] aria-invalid:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
className,
)}
{...props}
>
<RadioGroupPrimitive.Indicator
data-slot='radio-group-indicator'
className='relative flex items-center justify-center'
>
<CircleIcon className='fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2' />
</RadioGroupPrimitive.Indicator>
</RadioGroupPrimitive.Item>
);
};
TypeScript
볡μ¬
RadioGroupItem μ»΄ν¬λνΈλ λ§μ°¬κ°μ§λ‘ radix-uiμ RadioGroupPrimitive Item μ»΄ν¬λνΈλ₯Ό κ°μΈλ Wrapper ννμ μ»΄ν¬λνΈμ΄λ€. Itemμ μ€νμΌλ§ λΆλΆμμ νΉμ΄νλ λΆλΆμ aspect-square μμ±μ΄μλλ°, μ¬μ€ size μμ±λ§μΌλ‘λ μΆ©λΆν μμμ μ€μ ν μ μμ§ μμλ μκ°μ΄ λ€μλ€. μ’ λ μ°Ύμ보λ, Itemμ΄ flexλ grid μμ λ€μ΄κ° κ²½μ°, λλ heightμ΄λ widthκ° μΈλΆμμ μν₯μ λ°μ λ aspect-squareλ₯Ό ν΅ν΄ 1:1 λΉμ¨μ μ μ§νμ¬ μ°κ·Έλ¬μ§μ§ μκ² ν μ μλ€λ κ²μ μκ² λμλ€.
RadioGroupPrimitiveμ Indicatorλ μ νλ¨ μνμΌ λλ§ λ³΄μ΄λ νμ μμμ΄λ€. Radio μμ΄ν
μ΄ μ ν λμμ λ κ°μ΄λ°μ νμ λλ μ (Dot)μ΄λ€.