RadioGroupField
Loading...
How to use
import {
RadioGroupField,
Radio,
} from '@vibrant-ui/components';
Properties
RadioGroupField
| Prop | Type | Default | Description |
|---|---|---|---|
| name | string | 그룹 내 라디오 인풋 필드의 name | |
| value | string | 선택된 라디오를 지정합니다. 제어 모드로 동작하기 때문에 라디오가 선택됐을 때 onChange로 상태를 업데이트해야 합니다. | |
| defaultValue | string | 초기에 선택된 라디오를 지정합니다. | |
| onChange | (value: string) => void | 선택된 라디오의 상태가 바뀔 때 호출되는 콜백 함수 | |
| disabled | boolean | 그룹 내 라디오의 비활성화 여부 | |
| size | sm | md | md | 그룹 내 라디오의 크기 |
Radio
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | 그룹 내에서 라디오를 식별하기 위한 값 | |
| checked | string | 라디오의 체크 여부 | |
| disabled | boolean | false | 라디오의 비활성화 여부 |
| size | sm | md | md | 라디오의 크기. size가 지정되지 않은 경우 RadioGroupField의 size 속성 값이 사용됩니다. |
| label | string | 라디오의 라벨 | |
| description | string | 라디오의 설명 | |
| direction | horizontal | vertical | vertical | 라디오의 방향. direction을 지정하면 label 혹은 description이 지정되어야 합니다. |
| tabIndex | 0 | -1 | 탭 포커스의 도달 순서 지정 |
useRadio
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | 그룹 내에서 라디오를 식별하기 위한 값 | |
| checked | string | 라디오의 체크 여부 | |
| disabled | boolean | false | 라디오의 비활성화 여부 |
Usage
크기
Radio는 기본값인 md와 sm 2개의 사이즈를 갖습니다. Radio의 사이즈는RadioGroupField의 size 속성 값을 따르고 size 속성으로 다른 값으로 오버라이드할 수 있습니다.
Loading...
비활성화
RadioGroupField의 disabled 속성으로 그룹 내 모든 라디오 필드를 비활성화시킬 수 있습니다. 또는 Radio의 disabled 속성으로 개별 라디오의 비활성화 여부를 설정할 수 있습니다.
Loading...
커스텀 라디오
라디오로 동작하지만 Radio의 디자인을 따르지 않는 라디오 컴포넌트가 필요하다면 useRadio 훅을 사용하여 구현할 수 있습니다.
useRadio는 라디오의 체크된 상태나 상태가 바뀌었을 때 호출할 콜백 함수 등을 반환합니다.
const RadioButton = ({
value,
label,
}: {
value: string,
label: string,
}) => {
const { name, isChecked, isDisabled, onChange } =
useRadio({ value });
const id = useId();
return (
<Pressable
as="span"
width={100}
disabled={isDisabled}
backgroundColor={isChecked ? 'primary' : 'background'}
p={10}
rounded='lg'
>
<>
<Box
as="input"
id={id}
value={value}
name={name}
type="radio"
checked={isChecked}
onChange={onChange}
opacity={0}
position="absolute"
top={0}
left={0}
width="100%"
height="100%"
/>
<Body as="label" level={1} htmlFor={id}>
{label}
</Body>
</>
</Pressable>
);
};
<RadioGroupField name="radioGroup">
<RadioButton value="1" label="First" />
<RadioButton value="2" label="Second" />
<RadioButton value="3" label="Third" />
</RadioGroupField>;