Skyroc UI
导航

Segment

用于在少量互斥选项之间切换的分段控制器

Segment 用于在同一上下文中切换少量互斥选项。组件基于 Tabs 的结构和样式能力封装,只渲染触发项,不渲染内容面板,适合视图模式、时间范围、筛选维度等轻量选择场景。

import { Segment } from '@skyroc/web-ui';

何时使用

  • 选项数量较少,用户需要直接看到全部可选项。
  • 选项之间互斥,切换后通常影响同一区域的展示方式或过滤条件。
  • 需要比 Radio 更紧凑、更像工具栏的选择控件。
  • 需要展示独立内容面板时使用 Tabs;需要表单语义更明确的单选项时使用 Radio。

基础用法

通过 items 定义选项,使用 valueonValueChange 可以实现受控模式,也可以使用 defaultValue 作为非受控默认值。

Preview
Code
Loading...
<Segment
  defaultValue="day"
  items={[
    { value: 'day', label: 'Day' },
    { value: 'week', label: 'Week' }
  ]}
/>

方向

通过 orientation 控制排列方向。默认横向排列,纵向排列适合侧栏筛选、设置面板或窄容器。

Preview
Code
Loading...
<Segment
  items={items}
  orientation="vertical"
/>

形状

通过 shape 控制外层容器和激活指示器的圆角。

Preview
Code
Loading...
形状说明
square中等圆角,默认样式
rounded胶囊圆角,适合工具栏

尺寸

通过 size 调整字号、间距和触发项尺寸,从 xs2xl 共 6 个尺寸。

Preview
Code
Loading...
尺寸适用场景
xs表格、紧凑工具栏
sm小型筛选区
md常规场景(默认)
lg设置页或表单区域
xl强调型切换控件
2xl大尺寸展示或触控区

样式类型

通过 type 切换分段样式。pill 是默认填充式样式,line 使用线性指示器。设置 enableIndicator={false} 时,组件会使用触发项自身的激活背景。

Preview
Code
Loading...
<Segment
  items={items}
  type="line"
/>

<Segment
  enableIndicator={false}
  items={items}
/>

禁用

可以禁用整个 Segment,也可以在单个 item 上设置 disabled 禁用部分选项。

Preview
Code
Loading...
<Segment
  items={[
    { value: 'day', label: 'Day' },
    { value: 'week', label: 'Week', disabled: true }
  ]}
/>

<Segment disabled items={items} />

API

Segment

通用属性参考:Segment 复用 Tabs Root、List 和 Trigger 的交互能力,但不会渲染内容面板。

属性说明类型默认值
items*分段选项数据SegmentOptionData[]-
value受控模式下当前选中的值string-
defaultValue非受控模式下默认选中的值string-
onValueChange选中值变化时触发(value: string) => void-
orientation排列方向'horizontal' | 'vertical''horizontal'
shape圆角形状'square' | 'rounded''square'
size尺寸,影响字号、间距和触发项大小'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
type样式类型'pill' | 'line''pill'
fill根容器填充方式'auto' | 'full''auto'
enableIndicator是否显示滑动指示器booleantrue
disabled是否禁用全部选项boolean-
loop键盘导航是否循环boolean-
dir文本方向,透传给 Radix Tabs Root/List'ltr' | 'rtl'-
className根容器 classClassValue-
classNames各 slot 的自定义 classTabsUi-
listProps传递给内部 TabsList 的额外 propsTabsListProps-
triggerProps传递给每个内部 TabsTrigger 的额外 propsPartial<TabsTriggerProps>-

类型

SegmentProps

Segment 主组件属性。基于 TabsProps 收窄,移除了内容面板相关能力。

字段类型说明
itemsSegmentOptionData[]分段选项列表。
valuestring受控选中值。
defaultValuestring默认选中值。
onValueChange(value: string) => void选中值变化回调。
orientation'horizontal' | 'vertical'排列方向。
shape'square' | 'rounded'圆角形状。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。
type'pill' | 'line'样式类型。
fill'auto' | 'full'根容器填充方式。
enableIndicatorboolean是否显示滑动指示器。
disabledboolean是否禁用全部选项。
loopboolean键盘导航是否循环。
dir'ltr' | 'rtl'文本方向。
classNameClassValue根容器 class。
classNamesTabsUislot class 配置。
listPropsTabsListProps内部列表属性。
triggerPropsPartial<TabsTriggerProps>内部触发项属性。

SegmentOptionData

单个分段选项的数据结构。

字段类型说明
valuestring选项唯一值。
labelReactNode选项显示内容。
disabledboolean是否禁用当前选项。

TabsUi

Segment 复用 Tabs 的 slot class 配置。

字段类型说明
rootClassValue根容器 class。
listClassValue选项列表 class。
triggerClassValue触发项 class。
indicatorRootClassValue指示器定位容器 class。
indicatorClassValue指示器元素 class。

TabsListProps

内部列表属性,基于 Radix Tabs List,并增加项目样式变体。

字段类型说明
classNameClassValue列表 class。
classNamesPick<TabsUi, 'indicator' | 'indicatorRoot'>指示器相关 slot class。
enableIndicatorboolean是否显示滑动指示器。
orientation'horizontal' | 'vertical'排列方向。
shape'square' | 'rounded'圆角形状。
type'pill' | 'line'样式类型。
valuestring当前选中值。

TabsTriggerProps

内部触发项属性,基于 Radix Tabs Trigger,并增加项目样式变体。

字段类型说明
valuestring触发项对应值。
disabledboolean是否禁用触发项。
classNameClassValue触发项 class。
enableIndicatorboolean是否配合滑动指示器渲染。
type'pill' | 'line'样式类型。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page