Radio 单选Radio · RadioGroup
从一组互斥的选项里选一个,并且希望所有选项都摆在明面上。选项多于五六个时用 Select;两三个短选项也可以用 Segmented;带示意图的用 OptionCard。
基本用法
Radio 放在 RadioGroup 里使用。组放进 Field 会自动用 Field 的标签命名,否则请给 aria-label。
横向与说明文字
状态
请选择一种发票类型
受控用法
RadioGroup 的 onChange 参数是选中项的 value。value 传 null 表示都没选。
当前:pro
API
RadioGroup
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | string | null | — | 选中项的 value(受控);null 表示没选。 |
defaultValue | string | null | null | 初始选中项(非受控)。 |
onChange | (value: string) => void | — | 选中项变化时触发。 |
name | string | 自动生成 | 字段名。同名的原生单选才能用方向键互相移动,所以不传也会生成一个。 |
orientation | 'vertical' | 'horizontal' | 'vertical' | 排列方向。 |
disabled | boolean | — | 整组禁用。 |
required | boolean | — | 必填。 |
invalid | boolean | — | 校验失败。在 Field 里默认跟随 Field。 |
Radio
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value* | string | — | 这一项的值。 |
description | ReactNode | — | 标签下的说明文字。 |
disabled | boolean | — | 禁用这一项。 |
onChange | (value: string) => void | — | 这一项被选中时触发。不在 RadioGroup 里单独使用时配合 checked / name 用。 |
rootClassName / rootStyle | string / CSSProperties | — | 外层 <label> 的类名与样式。className / style 同样落在 <label> 上。 |
…rest | InputHTMLAttributes | — | 其余原生属性和 ref 落在 <input type="radio"> 上。 |
无障碍
- 组是
role="radiogroup",每一项是真的<input type="radio">。 - Tab 进入组时落在选中项上(都没选则落在第一项),再按 Tab 离开整组。
- ↑ ↓ ← → 在组内移动并同时选中,到头循环;Space 选中当前项。这是同名原生单选的浏览器行为,没有用脚本重做。
- 禁用项会被方向键跳过。
- 组的名称来自 Field 的标签(
aria-labelledby)或aria-label;必填与校验状态通过aria-required/aria-invalid标在组上。