Segmented 分段选择Segmented
在两到五个并列的短选项之间切换,通常用来换视图或筛选条件,切换后立即生效。选项多或文字长时用 Select 或 Radio;切换的是整块内容区时用 Tabs。
基本用法
默认选中第一个可用项。共享的滑块会滑到选中项上。
尺寸与撑满
图标
icon 放在文字前。只有图标时把 label 留空,并给这一项 aria-label。
禁用
受控用法
组件是泛型的:把 value 的联合类型传进去,onChange 的参数类型也跟着收窄。放进 Field 可以得到可见的标签。
当前视图:week
配合 Field
规格
- 尺寸
- 总高 40 / 32 · 轨道内边距 3
- 选中块
- translate + width · 弹簧
- 途中
- scale 1.05 × .86 压扁再复原
- 键盘
- ← → 切换
API
Segmented
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
options* | SegmentedOption<T>[] | — | 选项列表。 |
value | T | — | 选中项(受控)。 |
defaultValue | T | 第一个可用项 | 初始选中项(非受控)。 |
onChange | (value: T) => void | — | 选中项变化时触发。 |
size | 'sm' | 'md' | 'lg' | 'md' | 尺寸。 |
block | boolean | — | 撑满一行,各项等宽。 |
disabled | boolean | — | 整体禁用。 |
SegmentedOption
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value* | T extends string | — | 这一项的值。 |
label* | ReactNode | — | 文字;只有图标时传空字符串。 |
icon | ReactNode | — | 文字前的图标。 |
disabled | boolean | — | 禁用这一项。 |
aria-label | string | — | 只有图标时的可读名称。 |
无障碍
- 根节点是
role="radiogroup",每一项是role="radio"的按钮,用aria-checked表达选中。 - 整组只有一个 Tab 停靠点(选中项)。← → ↑ ↓ 移动并同时选中,到头循环;Home / End 到两端;禁用项被跳过。
- 必须有可读名称:
aria-label,或放进带 label 的 Field。 - 只有图标的项必须给
aria-label。 - 选中靠滑块的底色和位置表达,不依赖强调色。