使用高级 Chakra UI 组件更快地构建 💎

了解更多
跳到内容
文档演练场指南博客
赞助商

开关

用于捕获二元状态

源码Storybook配方Ark

用法

import { Switch } from "@chakra-ui/react"
<Switch.Root>
  <Switch.HiddenInput />
  <Switch.Control>
    <Switch.Thumb />
  </Switch.Control>
  <Switch.Label />
</Switch.Root>
信息
如果您偏好封闭式组件组合,请查看下面的代码片段

快捷方式

Switch 组件还为常见用例提供了一组快捷方式。

开关控制器

Switch.Control 默认在其内部渲染 Switch.Thumb

这样可行

<Switch.Control>
  <Switch.Thumb />
</Switch.Control>

如果您不需要自定义滑块,这可能会更简洁

<Switch.Control />

示例

尺寸

size 属性传递给 Switch.Root 组件以改变开关组件的尺寸。

变体

variant 属性传递给 Switch.Root 组件以改变开关的视觉样式。

颜色

colorPalette 属性传递给 Switch.Root 组件以改变组件的配色方案。

灰色

红色

绿色

蓝色

青色

粉色

紫色

青色

橙色

黄色

受控

使用 checkedonCheckedChange 属性来控制开关的状态。

Hook 表单

这是一个将开关与 react-hook-form 集成的示例。

禁用

disabled 属性传递给 Switch.Root 组件以禁用开关。

无效

invalid 属性传递给 Switch.Root 组件以指示开关的错误状态。

工具提示

这是一个如何将开关与工具提示组合的示例。

轨道指示器

使用 Switch.Indicator 组件根据选中状态显示不同的指示器。

滑块指示器

使用 Switch.ThumbIndicator 组件向开关滑块添加图标。

封闭式组件

以下是如何为封闭式组件组合设置 Switch。

import { Switch as ChakraSwitch } from "@chakra-ui/react"
import * as React from "react"

export interface SwitchProps extends ChakraSwitch.RootProps {
  inputProps?: React.InputHTMLAttributes<HTMLInputElement>
  rootRef?: React.RefObject<HTMLLabelElement | null>
  trackLabel?: { on: React.ReactNode; off: React.ReactNode }
  thumbLabel?: { on: React.ReactNode; off: React.ReactNode }
}

export const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(
  function Switch(props, ref) {
    const { inputProps, children, rootRef, trackLabel, thumbLabel, ...rest } =
      props

    return (
      <ChakraSwitch.Root ref={rootRef} {...rest}>
        <ChakraSwitch.HiddenInput ref={ref} {...inputProps} />
        <ChakraSwitch.Control>
          <ChakraSwitch.Thumb>
            {thumbLabel && (
              <ChakraSwitch.ThumbIndicator fallback={thumbLabel?.off}>
                {thumbLabel?.on}
              </ChakraSwitch.ThumbIndicator>
            )}
          </ChakraSwitch.Thumb>
          {trackLabel && (
            <ChakraSwitch.Indicator fallback={trackLabel.off}>
              {trackLabel.on}
            </ChakraSwitch.Indicator>
          )}
        </ChakraSwitch.Control>
        {children != null && (
          <ChakraSwitch.Label>{children}</ChakraSwitch.Label>
        )}
      </ChakraSwitch.Root>
    )
  },
)

如果您想自动将封闭式组件添加到您的项目中,请运行此命令

npx @chakra-ui/cli snippet add switch

以下是使用方法

<Switch>Activate Chakra</Switch>

属性

属性默认值类型
value 'on'
string | number

开关输入的值。对于表单提交很有用。

colorPalette 'gray'
'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'

组件的配色方案

variant 'solid'
'solid' | 'raised'

组件的变体

size 'md'
'xs' | 'sm' | 'md' | 'lg'

组件的尺寸

asChild
boolean

使用提供的子元素作为默认渲染元素,结合它们的属性和行为。

更多详情,请阅读我们的 组合 指南。
checked
boolean

开关是否选中。

disabled
boolean

开关是否禁用。

ids
Partial<{ root: string hiddenInput: string control: string label: string thumb: string }>

开关中元素的 ID。对于组合很有用。

invalid
boolean

如果 true,则开关被标记为无效。

label
string

指定用于标识无障碍元素及其状态的本地化字符串

name
string

开关中输入字段的名称(对于表单提交很有用)。

onCheckedChange
(details: CheckedChangeDetails) => void

点击开关时调用的函数。

readOnly
boolean

开关是否只读

required
boolean

如果 true,则开关输入被标记为必填项,

as
React.ElementType

要渲染的底层元素。

unstyled
boolean

是否移除组件的样式。

上一页

步骤

下一页

标签页