Switch 开关

开关选择器。

何时使用

  • 需要表示开关状态/两种状态之间的切换时;
  • checkbox的区别是,切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。

代码演示

基本

最简单的用法。

Switch开关 - 图1

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

受控

受控。

Switch开关 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Switch } from 'choerodon-ui/pro';
  4. class App extends React.Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. values: ['A'],
  9. };
  10. }
  11. handleChange = (value, oldValue) => {
  12. console.log('[controlled]', value, '[oldValues]', oldValue);
  13. const { values } = this.state;
  14. if (value) {
  15. values.push(value);
  16. } else {
  17. values.splice(values.indexOf(value), 1);
  18. }
  19. this.setState({
  20. values,
  21. });
  22. }
  23. render() {
  24. const { values } = this.state;
  25. return (
  26. <div>
  27. <Switch
  28. name="controlled"

绑定数据源

绑定数据源

Switch开关 - 图3

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

文字

带有文字和图标。

Switch开关 - 图4

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Switch, Icon } from 'choerodon-ui/pro';
  4. ReactDOM.render(
  5. <div>
  6. <Switch style={{margin:'.1rem'}} unCheckedChildren="关" defaultChecked>开</Switch>
  7. <br />
  8. <Switch style={{margin:'.1rem'}} unCheckedChildren="0">1</Switch>
  9. <br />
  10. <Switch style={{margin:'.1rem'}} unCheckedChildren={<Icon type="close" />}><Icon type="check" /></Switch>
  11. </div>,
  12. document.getElementById('container'));

只读

只读。

Switch开关 - 图5

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

API

更多属性请参考 CheckBox