跳转到内容

复选框 checkbox

数据录入组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

不传 checked 即为非受控

三态

checked 传 "indeterminate" 表示部分选中,它不是第三个稳定态:点一下就落到 true

当前:indeterminate

语气

tone 决定选中态的底与描边用哪族颜色,所以这里都置为选中

brandneutralsuccesswarningdangerinfo

尺寸

size 同时缩放方框与勾选标记,不写就是缺省档

缺省

事件

checked-change 带一份 { checked },非受控时内部翻转也照发一次

最近:(还没动过)

业务取值

checked 只认布尔,用一个可写 computed 在中间换一次,绑上去的就是业务值

启用(enabled)专业版(free)

自渲外壳与命令式聚焦

组合式函数只给属性,节点由作者自己写,DOM 引用因此拿得到

当前:未勾选

随表单提交

给了 name 才生出表单影子:勾上才提交,半选按未勾处理,与原生复选框一致

产物

自定义元素<xh-checkbox>
Vue 组件XhCheckbox
组合式函数useCheckbox
状态机checkboxMachine
皮肤@xihan-ui/styles/checkbox.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="checkbox"root · indicator · hidden-input

Props

属性类型必填说明
checkedCheckboxCheckedState
defaultCheckedCheckboxCheckedState
disabledboolean
namestring表单字段名;给了 hidden-input 才带 name 并参与提交。
valuestring提交出去的值,缺省 'on',与原生复选框一致。
toneTone语气:brand / neutral / success / warning / danger / info,决定选中态用哪族颜色。
sizeSize尺寸:sm / md / lg,决定方框边长与勾的字号档位。
onCheckedChange(details: CheckboxCheckedChangeDetails) => voidchecked 变化意图回调;受控时是唯一出口,非受控随内部转移一并通知。

状态机

状态off · on · indeterminate

事件TOGGLE · CHECK · UNCHECK · CONTROLLED.ON · CONTROLLED.OFF · CONTROLLED.INDETERMINATE · FORM.RESET

判据isCheckedControlled · defaultsToChecked · defaultsToIndeterminate

connect API

useCheckbox 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
checkedCheckboxCheckedState
setChecked(next: boolean) => void半选只能由 checked prop 给出,这里只接受全选 / 全不选。
getRootProps() => T['button']
getIndicatorProps() => T['element']
getHiddenInputProps() => T['input']表单影子:勾上才提交,半选按未勾处理。给了 name 才带 name。

键盘

规格出处:W3C APG

按键生效条件行为
Space / Enterfocus in root, not disabled切换 checked 状态

Released under The MIT License