Get startedFoundationsComponentsPatternsRules

Radio

라디오는 여러 선택지 중 정확히 하나만 고르게 할 때 써요.

설치

pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/steel/radio.json

Examples

Radio group

대부분은 RadioGroup 에 options 배열을 넘겨 써요. 각 항목은 value, label, isDisabled, testId 를 가질 수 있어요. 그룹 이름은 보이는 제목의 id 를 labelId 로 연결해요.

Controlled

value 와 onChange 로 선택을 직접 관리해요. 새 값은 e.currentTarget.value 로 읽어요. 관리할 필요가 없으면 defaultValue 만 줘요.

Children

options 대신 Radio 를 children 으로 넣어도 돼요. 레이아웃을 바꾸고 싶을 때 className 으로 가로 배치할 수 있어요.

Disabled

항목 하나는 option 의 isDisabled 로, 그룹 전체는 RadioGroup 의 isDisabled 로 비활성화해요. 그룹 값이 각 항목 값보다 우선해요.

Invalid

isInvalid 를 주면 선택된 라디오의 테두리가 danger 색으로 바뀌어요. 그룹 id 를 주면 aria-describedby 가 ${id}-error 를 가리키니, 오류 메시지에 그 id 를 붙여요.

Standalone radio

표 안처럼 배치를 직접 정해야 할 때는 Radio 를 단독으로 쓰고 isChecked, onChange 로 상태를 관리해요. 보이는 라벨이 없으면 ariaLabel 을 줘요.

Usage guidelines

라디오는 서로 배타적인 선택지 중 하나만 골라야 할 때 써요. 보통은 라디오 그룹으로 묶어서 쓰고, 표처럼 배치를 따로 정해야 할 때만 단독 라디오를 써요.

  • 여러 개를 고를 수 있다면 Checkbox 를, 즉시 켜고 끄는 설정이라면 Toggle 을 써요.
  • 선택지가 많다면 셀렉트를 써요.
  • 선택지는 가능성 높은 순, 간단한 순, 위험이 낮은 순으로 놓아요.
  • 기본값을 하나 정해 두세요. 안전하고 개인 정보를 덜 드러내는 쪽을 기본으로 고르고, 그런 기준이 없다면 가장 많이 고를 만한 쪽을 기본으로 해요.
  • 아무것도 고르지 않는 선택이 필요하면 "없음", 모든 경우를 나열할 수 없으면 "기타" 항목을 더해요.
Do· 위험이 낮은 기본값
결제·권한·보안처럼 민감한 선택은 가장 위험이 낮은 항목을 기본으로 둬요.
Don't· 가나다 순 정렬
가나다·알파벳 순은 언어가 바뀌면 순서가 무너져요. 의미 있는 순서로 놓아요.
  • 숫자 범위는 서로 겹치거나 빠지는 구간이 없게 나눠요. (예: "1–5명", "6–10명")
  • 라벨은 짧게 쓰되, 무엇을 고르는지 알 수 있을 만큼 맥락을 담아요.

Accessibility

  • 그룹은 role="radiogroup", 각 항목은 role="radio" 를 가져요. 그룹 이름은 labelId 나 aria-label 로 꼭 지정해요.
  • Tab 으로 그룹에 들어가면 선택된 항목으로 포커스가 가요. ↑ ↓ ← → 로 항목을 옮기며 선택하고, Space 로도 선택해요.
  • 필수 그룹에서 선택하지 않았거나 잘못 골랐다면 "항목을 선택해 주세요" 같은 오류 메시지를 보여줘요.
  • 탭 순서에 남아 있어야 하는 항목은 비활성으로 만들지 말고, 유효성 검사로 고를 수 없는 이유를 알려줘요.

Props

RadioGroup

Prop

Type

Radio

Prop

Type

On this page