MenuChevron Down
ToggleGroup 切换组 - Docs - Artefact

ToggleGroup 切换组

Forms
智能自动检测

简介

一组用于单选或多选(互斥或包容)的切换按钮 —— 例如文本格式化控件(粗体/斜体/下划线)或视图切换器。

水合

第二级 —— 智能自动检测。 ToggleGroup 默认渲染为静态 HTML,且不包含任何客户端 JS,除非存在行为信号。传入 interactive={true} 强制水合,或 interactive={false} 强制静态渲染。

当存在以下任一信号(或设置了 interactive={true})时,它会作为岛屿进行水合:

  • value(受控选择)
  • defaultValue(非受控初始选择)
  • onValueChange
interactive 属性结果
未设置, 信号静态 —— 不加载客户端 JS
未设置,存在信号作为岛屿水合
true作为岛屿水合
false静态 —— 不加载客户端 JS

用法

import { ToggleGroup } from "../components/ui";

export default function MyPage() {
  return (
    <ToggleGroup
      multiple
      defaultValue={["bold"]}
      items={[
        { label: "B", value: "bold" },
        { label: "I", value: "italic" },
        { label: "U", value: "underline" },
      ]}
    />
  );
}

自定义组合

传入 children 而非 items,以完全控制每个按钮的内容:

import { ToggleGroup } from "../components/ui";

export default function MyPage() {
  return (
    <ToggleGroup defaultValue={["list"]}>
      <ToggleGroup.Item value="grid">Grid</ToggleGroup.Item>
      <ToggleGroup.Item value="list">List</ToggleGroup.Item>
    </ToggleGroup>
  );
}

属性

根组件

属性类型说明
valuestring[]当前按下的取值(受控)。
defaultValuestring[]初始按下的取值(非受控)。
onValueChange(value: string[]) => void选择发生变化时调用。
multipleboolean允许同时按下多个项。默认 false(单选,可再次切换关闭)。
disabledboolean禁用所有项。
orientation"horizontal" | "vertical"布局流向,以及方向键移动的轴向。默认 "horizontal"
idstring根元素的 id。
variant"outline" | "ghost"视觉样式。默认 "outline"
size"sm" | "md" | "lg"视觉尺寸。默认 "md"
interactiveboolean覆盖水合决策(见上文)。
classstring根元素的自定义 CSS 类。

默认组合

属性类型说明
itemsToggleGroupItem[]当省略 children 时要渲染的按钮。

ToggleGroupItem

属性类型说明
valuestring项的唯一取值。
labelstring | JSX.Element按钮的显示内容。
disabledboolean禁用此按钮。

子组件

部分说明
ToggleGroup.Item一个切换按钮。需要 value 属性;在 multiple 模式下渲染 role="checkbox",否则渲染 role="radio"

无障碍

  • 根元素具有 role="group"
  • 项在 multiple 模式下渲染 role="checkbox" + aria-pressed,否则渲染 role="radio" + aria-checked
  • 方向键(Right/Down 向前移动,Left/Up 向后移动)在可用项之间漫游焦点;Home/End 跳到第一个/最后一个可用项 —— 与 orientation 对应。
  • data-stateon/off)和 data-disabled 会镜像到每个项上,用于样式设置。