본문으로 건너뛰기

ZSRadioGroup

여러 개의 라디오 버튼을 그룹으로 묶어 선택할 수 있는 컴포넌트입니다. 옵션은 배열 형태로 전달하며, 선택된 값을 상위 컴포넌트로 전달합니다.

기본 사용법

import { ZSRadioGroup, RadioOption } from '@0610studio/zs-ui';
import { useState } from 'react';

const options: RadioOption[] = [
{ index: '0', value: 'Apple' },
{ index: '1', value: 'Banana' },
{ index: '2', value: 'Orange' },
];

function MyComponent() {
const [selected, setSelected] = useState<RadioOption | undefined>();

return (
<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
/>
);
}

Props

PropTypeDefaultDescription
optionsRadioOption[]Required라디오 버튼 옵션 배열
valueRadioOptionundefined현재 선택된 값
onSelect(value: RadioOption) => voidRequired값이 변경될 때 호출되는 함수
containerStyleViewPropsundefined최상위 컨테이너 스타일
valueStyleZSTextPropsundefined옵션 텍스트 스타일
selectStyleZSTextPropsundefinedfullWidth 모드에서 선택 버튼 텍스트 스타일
disabledbooleanfalse전체 비활성화 여부
rowCount1 | 2 | 31한 행에 표시할 옵션 개수

특징

  • 다양한 레이아웃: 세로 배열과 그리드 레이아웃 지원
  • 시각적 피드백: 선택된 옵션에 대한 명확한 시각적 표시
  • 접근성: 비활성화 상태 지원 및 키보드 네비게이션 가능
  • 커스터마이징: 텍스트 스타일과 컨테이너 스타일을 자유롭게 설정 가능

RadioOption 타입

interface RadioOption {
value: string;
index: string;
}

레이아웃 모드

rowCount = 1 (기본값)

전체 너비를 차지하는 세로 배열 형태로 렌더링됩니다. 각 옵션 우측에 선택 버튼이 표시됩니다.

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
rowCount={1}
/>

rowCount = 2 또는 3

한 행에 여러 옵션을 표시하는 그리드 형태로 렌더링됩니다. 각 옵션 좌측에 원형 체크박스가 표시됩니다.

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
rowCount={2}
/>

예제

기본 사용 (세로 배열)

const options: RadioOption[] = [
{ index: '0', value: '옵션 1' },
{ index: '1', value: '옵션 2' },
{ index: '2', value: '옵션 3' },
];

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
/>

그리드 레이아웃 (2열)

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
rowCount={2}
/>

그리드 레이아웃 (3열)

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
rowCount={3}
/>

커스텀 텍스트 스타일

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
valueStyle={{ typo: 'body.1', color: 'primary' }}
selectStyle={{ typo: 'caption.1', color: 'white' }}
/>

비활성화 상태

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
disabled={true}
/>

컨테이너 스타일 커스터마이징

<ZSRadioGroup
options={options}
value={selected}
onSelect={setSelected}
containerStyle={{
padding: 20,
backgroundColor: '#f5f5f5',
}}
/>