Switch开关

开关选择器。

何时使用

  • 需要表示开关状态/两种状态之间的切换时;

  • checkbox的区别是,切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。

代码演示

Switch 开关 - 图1

基本

最简单的用法。

  1. import { Switch } from 'choerodon-ui/pro';
  2. function onChange(checked) {
  3. console.log(`switch to ${checked}`);
  4. }
  5. ReactDOM.render(
  6. <Switch defaultChecked onChange={onChange} />,
  7. mountNode
  8. );

Switch 开关 - 图2

绑定数据源

绑定数据源

  1. import { DataSet, Switch } from 'choerodon-ui/pro';
  2. function handleChange({ name, value, oldValue }) {
  3. console.log(`[dataset:${name}]`, value, '[oldValue]', oldValue);
  4. }
  5. const data = [{
  6. bind: 'A',
  7. }];
  8. class App extends React.Component {
  9. ds = new DataSet({
  10. fields: [
  11. { name: 'bind', multiple: true },
  12. { name: 'bind2', type: 'boolean' },
  13. { name: 'bind3', type: 'boolean', trueValue: 'Y', falseValue: 'N' },
  14. ],
  15. data,
  16. events: {
  17. update: handleChange,
  18. },
  19. });
  20. render() {
  21. return (
  22. <div>
  23. <Switch dataSet={this.ds} name="bind" value="A" />
  24. <Switch dataSet={this.ds} name="bind" value="B" />
  25. <Switch dataSet={this.ds} name="bind" value="C" />
  26. <Switch dataSet={this.ds} name="bind2" />
  27. <Switch dataSet={this.ds} name="bind3" />
  28. </div>
  29. );
  30. }
  31. }
  32. ReactDOM.render(
  33. <App />,
  34. mountNode
  35. );

Switch 开关 - 图3

只读

只读。

  1. import { Switch, DataSet } from 'choerodon-ui/pro';
  2. const data = [{ rd: 'C' }];
  3. class App extends React.Component {
  4. ds = new DataSet({
  5. fields: [
  6. { name: 'rd', readOnly: true },
  7. ],
  8. data,
  9. });
  10. render() {
  11. return (
  12. <div>
  13. <Switch name="rd" disabled />
  14. <br />
  15. <Switch name="rd" readOnly />
  16. <br />
  17. <Switch dataSet={this.ds} name="rd" value="C" />
  18. </div>
  19. );
  20. }
  21. }
  22. ReactDOM.render(
  23. <App />,
  24. mountNode
  25. );

Switch 开关 - 图4

受控

受控。

  1. import { Switch } from 'choerodon-ui/pro';
  2. class App extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. values: ['A'],
  7. };
  8. }
  9. handleChange = (value, oldValue) => {
  10. console.log('[controlled]', value, '[oldValues]', oldValue);
  11. const { values } = this.state;
  12. if (value) {
  13. values.push(value);
  14. } else {
  15. values.splice(values.indexOf(value), 1);
  16. }
  17. this.setState({
  18. values,
  19. });
  20. }
  21. render() {
  22. const { values } = this.state;
  23. return (
  24. <div>
  25. <Switch
  26. name="controlled"
  27. value="A"
  28. checked={values.indexOf('A') !== -1}
  29. onChange={this.handleChange}
  30. />
  31. <br />
  32. <Switch
  33. name="controlled"
  34. value="B"
  35. checked={values.indexOf('B') !== -1}
  36. onChange={this.handleChange}
  37. />
  38. <br />
  39. <Switch
  40. name="controlled"
  41. value="C"
  42. checked={values.indexOf('C') !== -1}
  43. onChange={this.handleChange}
  44. />
  45. </div>
  46. );
  47. }
  48. }
  49. ReactDOM.render(
  50. <App />,
  51. mountNode
  52. );

Switch 开关 - 图5

文字

带有文字和图标。

  1. import { Switch, Icon } from 'choerodon-ui/pro';
  2. ReactDOM.render(
  3. <div>
  4. <Switch unCheckedChildren="关" defaultChecked>开</Switch>
  5. <br />
  6. <Switch unCheckedChildren="0">1</Switch>
  7. <br />
  8. <Switch unCheckedChildren={<Icon type="close" />}><Icon type="check" /></Switch>
  9. </div>,
  10. mountNode);

Switch 开关 - 图6

两种大小

size="large" 表示大号开关。size="small" 表示小号开关。

  1. import { Switch } from 'choerodon-ui/pro';
  2. ReactDOM.render(
  3. <div>
  4. <Switch size="large" defaultChecked />
  5. <br />
  6. <Switch defaultChecked />
  7. <br />
  8. <Switch size="small" defaultChecked />
  9. </div>,
  10. mountNode);

API

更多属性请参考 CheckBox