多选框
查看源代码在一组数据中,用户可通过多选框选择一个或多个数据。
演示
import { Checkbox } from "@resolid/react-ui";
export default function App() {
return <Checkbox>多选框</Checkbox>;
}
用法
import { Checkbox, CheckboxGroup } from "@resolid/react-ui";
特点
- 由本机 HTML
<input>
元素构建,该元素在视觉上隐藏以允许自定义样式。 - 支持不确定状态。
- 完整的键盘导航。
- 可以是受控的,也可以是不受控的。
举例
默认值
使用 defaultChecked
属性来设置多选框的默认状态。
import { Checkbox } from "@resolid/react-ui";
export default function App() {
return <Checkbox defaultChecked>多选框</Checkbox>;
}
可控值
使用 checked
和 onChange
属性来控制多选框的状态。
import { Checkbox } from "@resolid/react-ui";
import { useState } from "react";
export default function App() {
const [checked, setChecked] = useState(false);
return (
<div className={"flex flex-col gap-2"}>
<p>{checked ? <span className={"text-fg-success"}>你已成功订阅</span> : "你取消了订阅"}</p>
<Checkbox value={"on"} checked={checked} onChange={setChecked}>
订阅更新
</Checkbox>
</div>
);
}
多选框组
使用 CheckboxGroup
组件将多个多选框分组在一起。
import { Checkbox, CheckboxGroup } from "@resolid/react-ui";
import { useState } from "react";
export default function App() {
const [value, setValue] = useState(["React"]);
return (
<div className={"flex flex-col gap-2"}>
<p>你选择了框架: {value.join(", ")}</p>
<CheckboxGroup value={value} onChange={setValue} className={"gap-5"}>
<Checkbox value={"React"}>React</Checkbox>
<Checkbox value={"Angular"}>Angular</Checkbox>
<Checkbox value={"Vue"}>Vue</Checkbox>
<Checkbox value={"SolidJS"}>SolidJS</Checkbox>
<Checkbox value={"Svelte"}>Svelte</Checkbox>
</CheckboxGroup>
</div>
);
}
部分选中
设置 indeterminate
属性以在不确定状态下显示复选框。
import { Checkbox } from "@resolid/react-ui";
import { useState } from "react";
export default function App() {
const [values, setValues] = useState([false, false, false, false, false]);
const allChecked = values.every(Boolean);
const isIndeterminate = values.some(Boolean) && !allChecked;
return (
<div className={"flex flex-col gap-2"}>
<Checkbox
checked={allChecked}
indeterminate={isIndeterminate}
onChange={(checked) => setValues([checked, checked, checked, checked, checked])}
>
工作日
</Checkbox>
<div className={"inline-flex flex-row gap-5"}>
{["周一", "周二", "周三", "周四", "周五"].map((day, index) => (
<Checkbox
key={day}
checked={values[index]}
onChange={(checked) => {
setValues((prev) => {
return [...prev.slice(0, index), !!checked, ...prev.slice(index + 1)];
});
}}
>
{day}
</Checkbox>
))}
</div>
</div>
);
}
属性
Checkbox
属性 | 类型 | 默认值 | 必须 | |
---|---|---|---|---|
属性color | 简介 颜色 | 类型"primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | 默认值"primary" | 必须false |
属性size | 简介 大小 | 类型"xs" | "sm" | "md" | "lg" | "xl" | 默认值"md" | 必须false |
属性indeterminate | 简介 部分选中 | 类型boolean | 默认值false | 必须false |
属性spacing | 简介 间距 | 类型string | number | 默认值"0.5em" | 必须false |
属性value | 简介 值 | 类型string | number | 默认值- | 必须false |
属性checked | 简介 可控值 | 类型boolean | 默认值- | 必须false |
属性defaultChecked | 简介 默认值 | 类型boolean | 默认值false | 必须false |
属性onChange | 简介 onChange 回调 | 类型(checked: boolean) => void | 默认值- | 必须false |
属性name | 简介 字段的名称, 提交表单时使用 | 类型string | 默认值- | 必须false |
属性disabled | 简介 是否禁用 | 类型boolean | 默认值false | 必须false |
属性required | 简介 是否必需 | 类型boolean | 默认值false | 必须false |
属性readOnly | 简介 是否只读 | 类型boolean | 默认值false | 必须false |
属性invalid | 简介 是否无效 | 类型boolean | 默认值false | 必须false |
CheckboxGroup
属性 | 类型 | 默认值 | 必须 | |
---|---|---|---|---|
属性orientation | 简介 方向 | 类型"horizontal" | "vertical" | 默认值'horizontal' | 必须false |
属性color | 简介 颜色 | 类型"primary" | "secondary" | "success" | "warning" | "danger" | "neutral" | 默认值"primary" | 必须false |
属性size | 简介 大小 | 类型"xs" | "sm" | "md" | "lg" | "xl" | 默认值"md" | 必须false |
属性value | 简介 可控值 | 类型(string | number)[] | 默认值- | 必须false |
属性defaultValue | 简介 默认值 | 类型(string | number)[] | 默认值- | 必须false |
属性onChange | 简介 onChange 回调 | 类型((value: (string | number)[]) => void) | 默认值- | 必须false |
属性name | 简介 字段的名称, 提交表单时使用 | 类型string | 默认值- | 必须false |
属性disabled | 简介 是否禁用 | 类型boolean | 默认值false | 必须false |
属性required | 简介 是否必需 | 类型boolean | 默认值false | 必须false |
属性readOnly | 简介 是否只读 | 类型boolean | 默认值false | 必须false |