Checkbox 复选框

介绍

在一组备选项中进行多选。

引入

import { Checkbox } from "@taroify/core"

代码演示

基础用法

通过 checked 绑定复选框的勾选状态。

<Checkbox>复选框</Checkbox>

禁用状态

通过设置 disabled 属性可以禁用复选框。

<Checkbox disabled checked={false}>复选框</Checkbox>
<Checkbox disabled checked>复选框</Checkbox>

自定义形状

shape 属性设置为 square,复选框的形状会变成方形。

<Checkbox shape="square">自定义形状</Checkbox>

复选框组自定义形状 v1.0.5

通过 Checkbox.Groupshape 属性统一设置组内复选框的形状。

<Checkbox.Group shape="square" defaultValue={["a"]}>
  <Checkbox name="a">复选框 a</Checkbox>
  <Checkbox name="b">复选框 b</Checkbox>
</Checkbox.Group>

按钮形状

shape 属性设置为 button,复选框会变成适合规格选择等场景的按钮。按钮形状下,iconsize 属性不生效。

<Checkbox.Group defaultValue={["a"]} direction="horizontal">
  <Checkbox name="a" shape="button">复选框 a</Checkbox>
  <Checkbox name="b" shape="button">复选框 b</Checkbox>
</Checkbox.Group>

自定义颜色 v1.0.5

通过 checkedColor 属性设置选中状态的图标颜色。

<Checkbox defaultChecked checkedColor="#ee0a24">自定义颜色</Checkbox>

自定义大小

通过 size 属性可以自定义图标的大小。

<Checkbox size={24}>自定义大小</Checkbox>

自定义图标

通过 icon 属性自定义图标。

function CheckboxWithCustomIcon() {
  const [value, setValue] = useState(false)

  return (
    <Checkbox
      icon={
        <Image
          src={`https://img.yzcdn.cn/vant/user-${value ? "active" : "inactive"}.png`}
          style={{
            width: "25px",
            height: "20px",
          }}
        />
      }
      checked={value}
      onChange={setValue}
    >
      自定义图标
    </Checkbox>
  )
}

左侧文本 v1.0.5

labelPosition 属性设置为 left,可以将文本位置调整到复选框左侧。

<Checkbox labelPosition="left">复选框</Checkbox>

禁用文本点击 v1.0.5

设置 labelDisabled 属性后,点击图标以外的内容不会触发复选框切换。

<Checkbox labelDisabled>复选框</Checkbox>

复选框组

复选框可以与复选框组一起使用,复选框组通过 value 数组绑定复选框的勾选状态。

<Checkbox.Group>
  <Checkbox name="a">复选框 a</Checkbox>
  <Checkbox name="b">复选框 b</Checkbox>
</Checkbox.Group>

水平排列

direction 属性设置为 horizontal 后,复选框组会变成水平排列。

<Checkbox.Group direction="horizontal">
  <Checkbox name="a">复选框 a</Checkbox>
  <Checkbox name="b">复选框 b</Checkbox>
</Checkbox.Group>

限制最大可选数

通过 max 属性可以限制复选框组的最大可选数。

<Checkbox.Group max={2}>
  <Checkbox name="a">复选框 a</Checkbox>
  <Checkbox name="b">复选框 b</Checkbox>
  <Checkbox name="c">复选框 c</Checkbox>
</Checkbox.Group>

全选与反选 v1.0.3

通过 Checkbox.Group 实例上的 toggleAll 方法可以实现全选、取消全选和反选。

function CheckboxToggleAll() {
  const groupRef = useRef<CheckboxGroupInstance>(null)

  return (
    <>
      <Checkbox.Group ref={groupRef}>
        <Checkbox name="a">复选框 a</Checkbox>
        <Checkbox name="b">复选框 b</Checkbox>
        <Checkbox name="c" disabled>复选框 c</Checkbox>
      </Checkbox.Group>
      <Space>
        <Button onClick={() => groupRef.current?.toggleAll(true)}>全选</Button>
        <Button onClick={() => groupRef.current?.toggleAll(false)}>取消全选</Button>
        <Button onClick={() => groupRef.current?.toggleAll()}>反选</Button>
      </Space>
    </>
  )
}

搭配单元格组件使用

此时你需要再引入 CellCell.Group 组件,并通过 Checkbox 实例上的 toggle 方法触发切换。Checkbox 外层通过 View 阻止事件冒泡,避免点击 Checkbox 时被 Cell 再次切换。

function CheckboxWithCell() {
  const checkboxRefs = useRef<Array<CheckboxInstance | null>>([])
  const options = ["a", "b"]

  return (
    <Checkbox.Group max={2}>
      <Cell.Group clickable>
        {options.map((name, index) => (
          <Cell
            key={name}
            title={`复选框 ${name}`}
            onClick={() => checkboxRefs.current[index]?.toggle()}
          >
            <View onClick={(event) => event.stopPropagation()}>
              <Checkbox
                ref={(instance) => {
                  checkboxRefs.current[index] = instance
                }}
                name={name}
              />
            </View>
          </Cell>
        ))}
      </Cell.Group>
    </Checkbox.Group>
  )
}

不确定状态 v1.0.5

通过 indeterminate 设置复选框是否为不确定状态。

function CheckboxIndeterminate() {
  const options = ["a", "b", "c"]
  const [value, setValue] = useState(["a", "b"])
  const checked = value.length === options.length
  const indeterminate = value.length > 0 && !checked

  return (
    <>
      <Checkbox
        checked={checked}
        indeterminate={indeterminate}
        onChange={(nextChecked) => setValue(nextChecked ? options : [])}
      >
        全选
      </Checkbox>
      <Checkbox.Group value={value} onChange={setValue}>
        {options.map((name) => (
          <Checkbox key={name} name={name}>复选框 {name}</Checkbox>
        ))}
      </Checkbox.Group>
    </>
  )
}

API

Checkbox Props

参数说明类型默认值
defaultChecked默认是否为选中状态booleanfalse
checked是否为选中状态booleanfalse
name标识符any-
shape v1.0.0形状,可选值为 square buttonstringround
disabled是否禁用复选框booleanfalse
labelPosition v1.0.5文本位置,可选值为 leftstringright
labelDisabled v1.0.5是否禁用复选框文本点击booleanfalse
size图标大小,默认单位为 px;字符串类型支持 v1.0.5number | string20px
checkedColor v1.0.5选中状态颜色string-
bindGroup v1.0.5是否与复选框组绑定booleantrue
indeterminate v1.0.5是否为不确定状态booleanfalse

CheckboxGroup Props

参数说明类型默认值
defaultValue默认所有选中项的标识符any[]-
value所有选中项的标识符any[]-
disabled是否禁用所有复选框booleanfalse
max最大可选数,0 为无限制number | string0
direction排列方向,可选值为 horizontalstringvertical
size所有复选框的图标大小,默认单位为 pxnumber | string20px
shape v1.0.5所有复选框的形状,可选值为 square buttonstringround
checkedColor v1.0.5所有复选框的选中状态颜色string-

Checkbox Events

事件名说明回调参数
onChange当绑定值变化时触发的事件checked: boolean

CheckboxGroup Events

事件名说明回调参数
onChange当绑定值变化时触发的事件names: any[]

Checkbox 方法 v1.0.3

通过 ref 可以获取 Checkbox 实例并调用实例方法。

方法名说明参数返回值
toggle v1.0.3切换选中状态,传 true 为选中,false 为取消选中,不传参数时取反checked?: boolean-

CheckboxGroup 方法 v1.0.3

通过 ref 可以获取 CheckboxGroup 实例并调用实例方法。

方法名说明参数返回值
toggleAll v1.0.3切换所有复选框,支持跳过禁用的复选框boolean | CheckboxGroupToggleAllOptions-
interface CheckboxGroupToggleAllOptions {
  checked?: boolean
  skipDisabled?: boolean
}
const checkboxRef = useRef<CheckboxInstance>(null)
const checkboxGroupRef = useRef<CheckboxGroupInstance>(null)

checkboxRef.current?.toggle()
checkboxRef.current?.toggle(true)

checkboxGroupRef.current?.toggleAll()
checkboxGroupRef.current?.toggleAll(true)
checkboxGroupRef.current?.toggleAll({ checked: true, skipDisabled: true })

类型定义 v1.0.3

组件导出以下实例类型:

import type {
  CheckboxLabelPosition,
  CheckboxProps,
  CheckboxShape,
  CheckboxInstance,
  CheckboxGroupProps,
  CheckboxGroupInstance,
  CheckboxGroupToggleAll,
  CheckboxGroupToggleAllOptions,
} from "@taroify/core"

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
--checkbox-size20px * $hd-
--checkbox-font-sizevar(--font-size-lg)-
--checkbox-border-colorvar(--gray-5)-
--checkbox-transition-durationvar(--animation-duration-fast)-
--checkbox-gapvar(--padding-sm)-
--checkbox-label-marginvar(--padding-xs)-
--checkbox-label-colorvar(--text-color)-
--checkbox-label-line-heightvar(--checkbox-size)-
--checkbox-disabled-label-colorvar(--gray-5)-
--checkbox-icon-font-sizevar(--checkbox-size)-
--checkbox-checked-icon-colorvar(--white)-
--checkbox-checked-icon-border-colorvar(--primary-color)-
--checkbox-checked-icon-background-colorvar(--primary-color)-
--checkbox-disabled-icon-colorvar(--gray-5)-
--checkbox-disabled-icon-border-colorvar(--gray-5)-
--checkbox-disabled-icon-background-colorvar(--border-color)-
--checkbox-button-padding v1.0.05px * $hd 18px * $hd-
--checkbox-button-border-radius v1.0.0var(--border-radius-max)-
--checkbox-button-color v1.0.0var(--text-color)-
--checkbox-button-background-color v1.0.0var(--gray-1)-
--checkbox-button-border-color v1.0.0var(--checkbox-button-background-color)-
--checkbox-button-checked-color v1.0.0var(--primary-color)-
--checkbox-button-checked-background-color v1.0.0var(--white)-
--checkbox-button-checked-border-color v1.0.0var(--primary-color)-
--checkbox-button-disabled-opacity v1.0.0var(--disabled-opacity)-