# RadioGroup
URL: /lynx/components/radio-group
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/components/radio-group.mdx
사용자가 여러 옵션 중 하나만 선택할 수 있게 하는 라디오 그룹 컴포넌트입니다.
Lynx Engine 최소 버전: 3.6
사용 가능 버전: @seed-design/lynx-react@0.1.0, @seed-design/lynx-css@0.1.0
## Preview
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
사과
바나나
오렌지
);
}
root.render();
```
## Installation
- npm: npx @seed-design/cli add ui:radio-group
- pnpm: pnpm dlx @seed-design/cli add ui:radio-group
- yarn: yarn dlx @seed-design/cli add ui:radio-group
- bun: bun x @seed-design/cli add ui:radio-group
## Props
### `RadioGroup`
### `RadioGroupItem`
### `Radiomark`
## Examples
### Sizes
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
사과
바나나
빨간색
파란색
);
}
root.render();
```
### Tones
#### Brand
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
사과
바나나
오렌지
);
}
root.render();
```
#### Neutral
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
사과
바나나
오렌지
);
}
root.render();
```
### Weights
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
Regular
Regular
Bold
Bold
);
}
root.render();
```
### Long Label
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
긴 라벨도 여러 줄로 자연스럽게 표시되어 선택 항목의 내용을 모두 확인할 수 있습니다.
화면 너비가 좁아져도 라디오 마크와 라벨의 정렬을 유지합니다.
);
}
root.render();
```
### Disabled
`RadioGroup.Root`의 `disabled`는 그룹 전체를 비활성화합니다. 개별 `RadioGroup.Item`도 따로 비활성화할 수 있습니다.
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
활성 옵션
비활성 옵션
그룹 전체 비활성
선택할 수 없음
);
}
root.render();
```
### Listening to Value Changes
`RadioGroup.Root`의 `onValueChange`로 선택 값 변경을 감지할 수 있습니다. Controlled 모드에서는 `value`와 `onValueChange`를 함께 사용합니다.
```tsx
import "./styles";
import { root, useState } from "@lynx-js/react";
import { RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
const [count, setCount] = useState(0);
const [lastValue, setLastValue] = useState(null);
return (
{
setCount((previous) => previous + 1);
setLastValue(value);
}}
>
사과
바나나
오렌지
onValueChange 호출: {count}회, 마지막 값: {JSON.stringify(lastValue)}
);
}
root.render();
```
### Use Cases
#### Using `Radiomark`
`RadioGroup.ItemControl`과 `RadioGroup.ItemIndicator`를 직접 조합하면 선택 상태를 공유하면서 항목의 배치를 바꿀 수 있습니다.
```tsx
import "./styles";
import { root } from "@lynx-js/react";
import { HStack, RadioGroup, VStack, useSeedClassName } from "@seed-design/lynx-react";
function Root() {
const seedClassName = useSeedClassName({ colorMode: "system" });
return (
Regular
Medium
Bold
);
}
root.render();
```
## 웹 버전과의 차이
Lynx `RadioGroup`은 React `RadioGroup`과 다음과 같은 차이가 있습니다.
- **Field wrapper 없음**: React snippet의 `label`, `description`, `errorMessage`, `indicator`, `showRequiredIndicator` 같은 field 관련 prop은 Lynx snippet에서 제공하지 않습니다.
- **아이콘 렌더링 방식**: 기본 `RadioGroup.ItemIndicator`는 `` dot으로 렌더됩니다. custom icon을 전달할 때는 `@karrotmarket/lynx-monochrome-icon`의 monochrome icon 컴포넌트를 사용해야 하며 raw `
## Lynx 미지원 기능
현재 Lynx 플랫폼 제약으로 다음 기능이 지원되지 않습니다.
### 런타임 모델 차이로 제외
| 기능 | 웹 대응 | 설명 |
| -------------------------------------------------------- | ---------------------- | --------------------------------------- |
| `RadioGroupItemHiddenInput` | `` | Lynx에 HTML form 제출 모델 없음 |
| `name` / `required` / `invalid` | form field props | Lynx에 native form 제출 모델 없음 |
| `inputProps` | 내부 input prop 전달 | Lynx에는 전달할 HTML input이 없음 |
| `label` / `description` / `errorMessage` on `RadioGroup` | field wrapper props | Lynx에 대응 field wrapper snippet을 제공하지 않음 |
| `focus` / `focusVisible` | 키보드 포커스 | Lynx에 키보드 포커스 개념 없음 |
| `onChange` (raw DOM event) | `React.ChangeEvent` | 의미 없음. `onValueChange`로 대체 |