Skyroc UI
反馈

Toggle

用于在按下与未按下状态之间切换的双态按钮组件

Toggle 用于表示一个可独立开关的双态操作,例如加粗、静音、收藏、开启某个工具状态。组件基于 Radix Toggle 封装,保留 presseddefaultPressedonPressedChange 等状态属性,并接入项目统一的尺寸和视觉变体。

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

何时使用

  • 需要让用户切换某个独立的开关状态,如文本加粗、筛选模式、工具启用。
  • 状态本身可以通过按钮的按下态表达,不需要额外的表单提交。
  • 多个选项可以独立开关时,可组合多个 Toggle;互斥单选场景更适合使用 Radio 或 Segment。
  • 需要普通点击触发动作但不保留按下状态时,使用 Button。

基础用法

Toggle 会根据 Radix 的 data-state="on" 显示按下态。仅使用图标时应提供 aria-label

Preview
Code
Loading...
<Toggle aria-label="Toggle bold">
  <Bold className="size-4" />
</Toggle>

变体

通过 variant 控制 Toggle 的基础视觉样式。当前实现提供 ghostoutline 两种变体,按下态都会使用 accent 背景。

变体视觉强度适用场景
ghost工具栏、图标按钮、轻量切换
outline需要边框边界的独立切换项
Preview
Code
Loading...
<Toggle variant="outline">Outline</Toggle>

受控状态

通过 pressedonPressedChange 控制 Toggle 状态。非受控场景可以使用 defaultPressed 设置初始按下态。

Preview
Code
Loading...
const [pressed, setPressed] = useState(false);

<Toggle pressed={pressed} onPressedChange={setPressed} />;

尺寸

通过 size 调整 Toggle 的高度、横向内边距和字号。默认尺寸为 md

尺寸高度字号适用场景
xs24px10px紧凑工具栏
sm28px12px表格内操作、辅助项
md32px14px常规场景(默认)
lg36px16px强调操作
xl40px18px大号操作区
2xl48px20px大尺寸展示
Preview
Code
Loading...

禁用

设置 disabled 后,Toggle 不可交互,并降低透明度。

Preview
Code
Loading...
<Toggle disabled>Disabled</Toggle>

API

Toggle

通用属性参考:继承 Radix Toggle Root 属性,并增加项目尺寸和视觉变体。

属性说明类型默认值
pressed受控按下状态boolean-
defaultPressed非受控模式下的默认按下状态boolean-
onPressedChange按下状态变化时触发(pressed: boolean) => void-
variant视觉样式'ghost' | 'outline''ghost'
size尺寸,影响高度、横向内边距和字号'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
disabled是否禁用booleanfalse
childrenToggle 内容,通常是图标或短文本ReactNode-
className自定义 classClassValue-
asChild将渲染委托给子元素,合并 props 和行为booleanfalse
aria-label无文本内容时提供可访问名称string-

类型

ToggleProps

Toggle 组件属性。继承 Radix Toggle Root 属性,并增加项目尺寸和视觉变体。

字段类型说明
asChildboolean将渲染委托给子元素。
childrenReactNodeToggle 内容。
classNameClassValue自定义 class。
defaultPressedboolean非受控默认按下状态。
disabledboolean是否禁用。
onPressedChange(pressed: boolean) => void按下状态变化回调。
pressedboolean受控按下状态。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。来自 StyledComponentProps。
variant'ghost' | 'outline'视觉样式。
...buttonPropsbutton element props without native className其他原生 button 属性。

StyledComponentProps<T>

项目内用于包装组件 props 的通用类型。

字段类型说明
...sourcePropsinherited props without className继承原始组件属性,但重新定义 className。
classNameClassValue组件 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'项目统一尺寸类型。

ClassValue

CSS 类名类型

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

On this page