Checkbox 复选按钮

如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @alifd/next@latest -S

开发指南

多选框

何时使用

复选框允许用户从一个数据集中选择多个选项。如果在一个列表中有多个选项,你可以通过使用复选框而不是开/关切换来节省空间。如果你有一个单选项,不要用复选框,使用开/关切换。

API

Checkbox

参数说明类型默认值
idcheckbox id, 挂载在input上String-
checked选中状态Boolean-
defaultChecked默认选中状态Booleanfalse
disabled禁用Boolean-
label通过属性配置label,ReactNode-
indeterminateCheckbox 的中间状态,只会影响到 Checkbox 的样式,并不影响其 checked 属性Boolean-
defaultIndeterminateCheckbox 的默认中间态,只会影响到 Checkbox 的样式,并不影响其 checked 属性Booleanfalse
onChange状态变化时触发的事件签名:Function(checked: Boolean, e: Event) => void参数:checked: {Boolean} 是否选中e: {Event} Dom 事件对象Functionfunc.noop
onMouseEnter鼠标进入enter事件签名:Function(e: Event) => void参数:e: {Event} Dom 事件对象Functionfunc.noop
onMouseLeave鼠标离开Leave事件签名:Function(e: Event) => void参数:e: {Event} Dom 事件对象Functionfunc.noop

Checkbox.Group

参数说明类型默认值
disabled整体禁用Boolean-
dataSource可选项列表, 数据项可为 String 或者 Object, 如 ['apple', 'pear', 'orange'] 或者 [{value: 'apple', label: '苹果',}, {value: 'pear', label: '梨'}, {value: 'orange', label: '橙子'}]Array<any>[]
value被选中的值列表Array/String/Number-
defaultValue默认被选中的值列表Array/String/Number-
children通过子元素方式设置内部 checkboxArray<ReactElement>-
onChange选中值改变时的事件签名:Function(value: Array, e: Event) => void参数:value: {Array} 选中项列表e: {Event} Dom 事件对象Function() => {}
itemDirection子项目的排列方式- hoz: 水平排列 (default)- ver: 垂直排列可选值:'hoz', 'ver'Enum'hoz'

ARIA and KeyBoard

按键说明
SPACE选择或取消当前项

代码示例

基本

使用 Checkbox 渲染的基本组件。

Checkbox 复选按钮 - 图1

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <h6>Different status without label:</h6>
  5. <Checkbox >Unchecked</Checkbox>
  6. <Checkbox defaultChecked >DefaultChecked</Checkbox>
  7. <Checkbox defaultIndeterminate >Indeterminate</Checkbox>
  8. <Checkbox disabled >Disabled</Checkbox>;
  9. <Checkbox disabled checked >Checked-Disabled</Checkbox>
  10. <Checkbox checked >Checked</Checkbox>
  11. <h6>Using with label</h6>
  12. <Checkbox>Banana</Checkbox>&nbsp;
  13. <Checkbox id="apple" /><label htmlFor="apple" className="next-checkbox-label">Apple</label>&nbsp;
  14. <label>
  15. <Checkbox id="pear" />
  16. <span className="next-checkbox-label">Pear</span>
  17. </label>&nbsp;
  18. <Checkbox label="Banana" />
  19. </div>, mountNode);

分组

使用 <Checkbox.Group> 渲染 <Checkbox> 分组。

Checkbox 复选按钮 - 图2

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. const CheckboxGroup = () => (
  3. <div>
  4. <h4>Horizonal direction</h4>
  5. <p>
  6. <Checkbox.Group itemDirection="hoz">
  7. <Checkbox value="react">React</Checkbox>
  8. <Checkbox value="vue">Vue</Checkbox>
  9. <Checkbox value="angular">Angular</Checkbox>
  10. </Checkbox.Group>
  11. </p>
  12. <h4>Vertical direction</h4>
  13. <p>
  14. <Checkbox.Group itemDirection="ver">
  15. <Checkbox value="react">React</Checkbox>
  16. <Checkbox value="vue">Vue</Checkbox>
  17. <Checkbox value="angular">Angular</Checkbox>
  18. </Checkbox.Group>
  19. </p>
  20. </div>
  21. );
  22. ReactDOM.render(<CheckboxGroup />, mountNode);

中间状态组件

通过使用 indeterminate 来渲染中间状态的组件。

Checkbox 复选按钮 - 图3

查看源码在线预览

  1. import { Checkbox, Button } from '@alifd/next';
  2. class IndeterminateApp extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. checked: false,
  7. indeterminate: true,
  8. disabled: false
  9. };
  10. }
  11. render() {
  12. return (
  13. <div>
  14. <Checkbox
  15. checked={this.state.checked}
  16. indeterminate={this.state.indeterminate}
  17. disabled={this.state.disabled}
  18. onChange={
  19. (checked) => {
  20. this.setState({checked: checked, indeterminate: false});
  21. }
  22. }
  23. />
  24. <br />
  25. <br />
  26. <Button
  27. type="primary"
  28. onClick={
  29. () => {
  30. this.setState({checked: true, indeterminate: false});
  31. }
  32. }>checked = true</Button>
  33. <br />
  34. <br />
  35. <Button
  36. type="primary"
  37. onClick={
  38. () => {
  39. this.setState({checked: false});
  40. }
  41. }
  42. >checked = false</Button>
  43. <br />
  44. <br />
  45. <Button
  46. type="primary"
  47. onClick={
  48. () => {
  49. this.setState({checked: false, indeterminate: true});
  50. }
  51. }
  52. >indeterminate = true</Button>
  53. <br />
  54. <br />
  55. <Button
  56. type="primary"
  57. onClick={
  58. () => {
  59. this.setState({indeterminate: false});
  60. }
  61. }
  62. >indeterminate = false</Button>
  63. <br />
  64. <br />
  65. <Button
  66. type="primary"
  67. onClick={
  68. () => {
  69. this.setState({disabled: !this.state.disabled});
  70. }
  71. }
  72. >toggle disabled</Button>
  73. </div>
  74. );
  75. }
  76. }
  77. ReactDOM.render(<IndeterminateApp />, mountNode);

受限组件

使用 CheckboxGroup 渲染的组,通过设置 value 属性可以让组件变成受限组件

Checkbox 复选按钮 - 图4

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. const { Group: CheckboxGroup } = Checkbox;
  3. const list = [
  4. {
  5. value: 'apple',
  6. label: 'Apple'
  7. }, {
  8. value: 'pear',
  9. label: 'Pear'
  10. }, {
  11. value: 'orange',
  12. label: 'Orange'
  13. }
  14. ];
  15. class ControlApp extends React.Component {
  16. constructor(props) {
  17. super(props);
  18. this.state = {
  19. value: ['orange']
  20. };
  21. this.onChange = this.onChange.bind(this);
  22. }
  23. onChange(selectedItems) {
  24. console.log('onChange callback', selectedItems);
  25. this.setState({
  26. value: selectedItems
  27. });
  28. }
  29. render() {
  30. return (
  31. <div style={{padding: '20px'}}>
  32. <CheckboxGroup value={this.state.value} dataSource={list} onChange={this.onChange} />
  33. </div>
  34. );
  35. }
  36. }
  37. ReactDOM.render(<ControlApp />, mountNode);

非受限组件

使用 CheckboxGroup 渲染的组,通过设置 defaultValue 属性可以让组件变成非受限组件

Checkbox 复选按钮 - 图5

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. const { Group: CheckboxGroup } = Checkbox;
  3. const list = [
  4. {
  5. value: 'apple',
  6. label: 'Apple',
  7. disabled: false
  8. }, {
  9. value: 'pear',
  10. label: 'Pear'
  11. }, {
  12. value: 'orange',
  13. label: 'Orange',
  14. disabled: true
  15. }
  16. ];
  17. class UnControlApp extends React.Component {
  18. constructor(props) {
  19. super(props);
  20. this.onChange = this.onChange.bind(this);
  21. }
  22. onChange(selectedItems) {
  23. console.log('onChange callback', selectedItems);
  24. }
  25. render() {
  26. return (
  27. <div style={{padding: '20px'}}>
  28. <CheckboxGroup defaultValue={['apple']} dataSource={list} onChange={this.onChange} />
  29. </div>
  30. );
  31. }
  32. }
  33. ReactDOM.render(<UnControlApp />, mountNode);

Checkbox嵌套使用

使用 CheckboxGroup,通过直接嵌套 Checkbox 组件来渲染的组。

Checkbox 复选按钮 - 图6

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. const { Group: CheckboxGroup } = Checkbox;
  3. class NestApp extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = {
  7. value: ['orange']
  8. };
  9. this.onChange = this.onChange.bind(this);
  10. }
  11. onChange(selectedItems) {
  12. this.setState({
  13. value: selectedItems
  14. });
  15. }
  16. render() {
  17. return (
  18. <div>
  19. <CheckboxGroup value={this.state.value} onChange={this.onChange}>
  20. <Checkbox id="apple" value="apple" disabled>Apple</Checkbox>
  21. <Checkbox id="watermelon" value="watermelon">Watermelon</Checkbox>
  22. <Checkbox id="orange" value="orange">Orange</Checkbox>
  23. </CheckboxGroup>
  24. </div>
  25. );
  26. }
  27. }
  28. ReactDOM.render(<NestApp />, mountNode);

无障碍

通过aria-labelCheckbox组件进行描述。关于键盘操作请参考ARIA and KeyBoard

Checkbox 复选按钮 - 图7

查看源码在线预览

  1. import { Checkbox } from '@alifd/next';
  2. const CheckboxGroup = () => (
  3. <div>
  4. <h4>Programming language:</h4>
  5. <Checkbox.Group aria-label="Please select a programming language">
  6. <Checkbox value="python">python</Checkbox>
  7. <Checkbox value="java">java</Checkbox>
  8. <Checkbox value="angular">angular</Checkbox>
  9. <Checkbox value="c">c</Checkbox>
  10. <Checkbox value="other">other</Checkbox>
  11. </Checkbox.Group>
  12. </div>
  13. );
  14. ReactDOM.render(<CheckboxGroup />, mountNode);

相关区块

Checkbox 复选按钮 - 图8

暂无相关区块