AIFT Design
Components

Radio

라디오 버튼 컴포넌트

Radio

라디오 버튼 컴포넌트는 여러 옵션 중 하나를 선택하는 폼 요소입니다.

기본 사용법

import { RadioGroup, Radio } from '@aift/ui/Radio';export default function Preview() {  return (    <div className="flex flex-col space-y-4">      <Radio value="option1" id="radio-1" label="라디오 버튼 예제"/>      <Radio value="option3" id="radio-3" disabled label="비활성화 라디오 버튼 예제"/>    </div>  );}

Sizes

'use client';import { Radio, RadioGroup } from '@aift/ui/Radio';export default function Sizes() {  return (    <div className="flex flex-col space-y-4">      <RadioGroup name="radio-group" defaultValue="small">        <Radio value="small" size="small" label="small 크기" />        <Radio value="medium" size="medium" label="medium 크기" />      </RadioGroup>    </div>  );}

Group

'use client';import { RadioGroup, Radio } from '@aift/ui/Radio';export default function Group() {  return (    <div className="space-y-4">      <RadioGroup name="radio-group" defaultValue="option1">        <Radio value="option1" label="라디오 버튼 그룹 예제 1" />        <Radio value="option2" label="라디오 버튼 그룹 예제 2" />        <Radio value="option3" label="라디오 버튼 그룹 예제 3" />      </RadioGroup>    </div>  );}

React Hook Form

좋아하는 과일 선택
좋아하는 과일을 선택해주세요.
'use client';import { RadioGroup, Radio } from '@aift/ui/Radio';import { Button } from '@aift/ui/Button';import { useController, useForm } from 'react-hook-form';import { useState } from 'react';interface FormData {  radio: string;}export default function ReactHookForm() {  const { reset, handleSubmit, setValue, formState: { errors, isSubmitting }, control } = useForm<FormData>({    mode: 'onSubmit',    reValidateMode: 'onChange',    defaultValues: {      radio: 'banana'    }  });  const { field } = useController({    name: 'radio',    control: control,  });  const [errorText, setErrorText] = useState<string>('');  const onSubmit = (data: FormData) => {    console.log(data);  };  const handleReset = () => {    reset();  }  return (    <form onSubmit={handleSubmit(onSubmit)} className="space-y-4">      <RadioGroup         legend="좋아하는 과일 선택"        required        errorText={errorText}        helperText="좋아하는 과일을 선택해주세요."        value={field.value}        onValueChange={((value) => setValue('radio', value))}      >        <Radio value="apple" label="사과" />        <Radio value="banana" label="바나나" />        <Radio value="cherry" label="체리" />      </RadioGroup>      <div className="flex gap-2 mt-4">        <Button type="button" variant="outlined" onClick={handleReset}>초기화</Button>        <Button type="submit" disabled={isSubmitting} variant="contained" color="primary">제출</Button>      </div>    </form>  );}

Props

Radio

PropTypeDefaultDescription
valuestring | number-라디오 버튼의 값
namestring-라디오 버튼 그룹 이름
idstring-라디오 버튼 ID
disabledbooleanfalse비활성화 여부
color'primary' | 'positive' | 'cautionary' | 'destructive' | 'info''primary'라디오 버튼 색상
size'small' | 'medium''medium'라디오 버튼 크기
labelReact.ReactNode-라디오 버튼 라벨
inputRefRef<HTMLInputElement>-input 요소의 ref (react-hook-form 등에서 사용)
classNamestring-추가 클래스명

RadioGroup

PropTypeDefaultDescription
namestring-그룹 이름 (fieldset의 name 속성)
legendstring-그룹 제목 (legend)
valuestring-현재 선택된 값 (controlled 모드)
defaultValuestring-기본 선택된 값 (uncontrolled 모드)
onValueChange(value: string) => void-값 변경 시 호출되는 콜백
disabledbooleanfalse그룹 비활성화 여부
color'primary' | 'positive' | 'cautionary' | 'destructive' | 'info''primary'기본 색상 (개별 옵션에 color가 없을 때 사용)
classNamestring-추가 클래스명
gap'sm' | 'md' | 'lg' | number'md'옵션 간 간격
orientation'vertical' | 'horizontal''vertical'레이아웃 방향
childrenReact.ReactNode필수옵션 목록
requiredboolean-필수 여부
helperTextstring-도움말 텍스트
errorTextstring-에러 텍스트
warnTextstring-경고 텍스트

On this page