Skip to content

Switch

Switch 用于在开启和关闭之间切换单个设置,支持非受控、受控、标签说明、尺寸和 sx 样式定制。

Basic

基础开关可以直接使用,也可以通过 label 提供可访问名称。

Controlled

通过 checkedonCheckedChange 可以受控管理开关状态。

Label Description

labeldescription 会渲染为开关旁的文本区域,并通过 aria-describedby 关联说明文本。

Sizes / SX

size 提供常用尺寸,sx 定制开关本体,containerSx 定制带标签时的外层容器。

常见场景

基础表单

在普通表单项中使用 Switch,保持 label、错误提示和控件状态清晰可见。

受控状态

当字段值需要联动查询、校验或提交时,使用受控 props 管理状态。

禁用与校验

禁用、必填、错误等状态应由表单层统一管理,再传递给 Switch。

Usage

tsx
import { Switch } from "@ldkj/web-ui";

export function Example() {
  return <Switch defaultChecked label="接收系统通知" />;
}

受控用法:

tsx
import * as React from "react";
import { Switch } from "@ldkj/web-ui";

export function ControlledExample() {
  const [checked, setChecked] = React.useState(false);

  return (
    <Switch
      checked={checked}
      onCheckedChange={setChecked}
      label="自动同步"
    />
  );
}

API

Switch 基于 @radix-ui/react-switch,支持其 Root 的常用属性。

属性说明类型默认值
checked受控开启状态boolean-
defaultChecked默认开启状态boolean-
onCheckedChange状态变化回调(checked: boolean) => void-
disabled是否禁用booleanfalse
required是否必填booleanfalse
name表单字段名string-
value表单提交值string"on"
size开关尺寸"sm" | "md" | "lg""md"
label标签内容React.ReactNode-
description说明内容React.ReactNode-
labelPosition标签位置"left" | "right""right"
className开关自定义类名string-
class开关类名别名string-
style开关原生样式React.CSSProperties-
sx开关 CSS-in-JS 样式入口SxProps-
containerClassName外层容器自定义类名string-
containerClass外层容器类名别名string-
containerStyle外层容器原生样式React.CSSProperties-
containerSx外层容器 CSS-in-JS 样式入口SxProps-

其余属性继承 Radix Switch.Root,例如 idaria-labelaria-labelledbyaria-describedby 等可访问性属性。

行为规则 / 优先级

  • 表单组件优先由外部表单层管理值、校验和提交状态。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Switch 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • 未传入 label 时,请通过 aria-labelaria-labelledby 提供可访问名称。
  • labeldescription 只负责展示和无障碍关联,业务状态仍由 Radix 的 checked / defaultChecked / onCheckedChange 管理。
  • sx 作用于开关根节点;需要调整带文本布局时使用 containerSx