Button 按钮

按钮用于开始一个即时操作。

何时使用

标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。

代码演示

按钮类型

按钮有四种类型:主按钮、次按钮、虚线按钮、危险按钮。主按钮在同一个操作区域最多出现一次。

Button按钮 - 图1

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button } from 'choerodon-ui';
  4. ReactDOM.render(
  5. <div>
  6. <Button style={{ marginRight: 10 }} funcType="raised">
  7. Rasied
  8. </Button>
  9. <Button style={{ marginRight: 10 }} funcType="flat">
  10. Flat
  11. </Button>
  12. <Button
  13. style={{ marginRight: 10 }}
  14. shape="circle"
  15. funcType="flat"
  16. icon="search"
  17. />
  18. </div>,
  19. document.getElementById('container'),
  20. );

图标按钮

当需要在 Button 内嵌入 Icon 时,可以设置 icon 属性,或者直接在 Button 内使用 Icon 组件。

如果想控制 Icon 具体的位置,只能直接使用 Icon 组件,而非 icon 属性。

Button按钮 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button } from 'choerodon-ui';
  4. ReactDOM.render(
  5. <div>
  6. <Button
  7. style={{ marginRight: 10 }}
  8. type="primary"
  9. funcType="raised"
  10. shape="circle"
  11. icon="search"
  12. />
  13. <Button
  14. style={{ marginRight: 10 }}
  15. type="primary"
  16. funcType="raised"
  17. icon="search"
  18. >
  19. Search
  20. </Button>
  21. <Button
  22. style={{ marginRight: 10 }}
  23. type="primary"
  24. funcType="flat"
  25. shape="circle"
  26. icon="search"
  27. />

按钮尺寸

按钮有大、中、小三种尺寸。

通过设置 sizelarge small 分别把按钮设为大、小尺寸。若不设置 size,则尺寸为中。

Button按钮 - 图3

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button, Radio, Icon } from 'choerodon-ui';
  4. class ButtonSize extends React.Component {
  5. state = {
  6. size: 'large',
  7. };
  8. handleSizeChange = (e) => {
  9. this.setState({ size: e.target.value });
  10. };
  11. render() {
  12. const { size } = this.state;
  13. return (
  14. <div>
  15. <Radio.Group value={size} onChange={this.handleSizeChange}>
  16. <Radio.Button value="large">Large</Radio.Button>
  17. <Radio.Button value="default">Default</Radio.Button>
  18. <Radio.Button value="small">Small</Radio.Button>
  19. </Radio.Group>
  20. <br />
  21. <br />
  22. <Button style={{ marginRight: 10 }} type="primary" size={size}>
  23. 默认
  24. </Button>
  25. <Button style={{ marginRight: 10 }} size={size}>
  26. Normal
  27. </Button>
  28. <Button style={{ marginRight: 10 }} type="dashed" size={size}>
  29. Dashed
  30. </Button>
  31. <Button style={{ marginRight: 10 }} type="danger" size={size}>

不可用状态

添加 disabled 属性即可让按钮处于不可用状态,同时按钮样式也会改变。

Button按钮 - 图4

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button } from 'choerodon-ui';
  4. ReactDOM.render(
  5. <div>
  6. <Button
  7. style={{ marginRight: 10, marginBottom: 10 }}
  8. type="primary"
  9. funcType="raised"
  10. >
  11. Primary
  12. </Button>
  13. <Button style={{ marginRight: 10 }} type="primary" disabled>
  14. Primary(disabled)
  15. </Button>
  16. <Button style={{ marginRight: 10 }}>Default</Button>
  17. <Button style={{ marginRight: 10 }} disabled>
  18. Default(disabled)
  19. </Button>
  20. <Button style={{ marginRight: 10 }}>Ghost</Button>
  21. <Button style={{ marginRight: 10 }} disabled>
  22. Ghost(disabled)
  23. </Button>
  24. <Button style={{ marginRight: 10 }} type="dashed">
  25. Dashed
  26. </Button>
  27. <Button style={{ marginRight: 10 }} type="dashed" disabled>

加载中状态

添加 loading 属性即可让按钮处于加载状态,最后两个按钮演示点击后进入加载状态。

Button按钮 - 图5

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button } from 'choerodon-ui';
  4. class App extends React.Component {
  5. state = {
  6. loading: false,
  7. iconLoading: false,
  8. };
  9. enterLoading = () => {
  10. this.setState({ loading: true });
  11. };
  12. enterIconLoading = () => {
  13. this.setState({ iconLoading: true });
  14. };
  15. render() {
  16. return (
  17. <span>
  18. <Button style={{ marginRight: 10 }} type="primary" loading>
  19. Loading
  20. </Button>
  21. <Button
  22. style={{ marginRight: 10 }}
  23. type="primary"
  24. funcType="raised"
  25. loading
  26. >

多个按钮组合

按钮组合使用时,推荐使用 1 个主操作 + n 个次操作,3 个以上操作时把更多操作放到 Dropdown.Button 中组合使用。

Button按钮 - 图6

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button, Menu, Dropdown, Icon } from 'choerodon-ui';
  4. function handleMenuClick(e) {
  5. console.log('click', e);
  6. }
  7. const menu = (
  8. <Menu onClick={handleMenuClick}>
  9. <Menu.Item key="1">1st item</Menu.Item>
  10. <Menu.Item key="2">2nd item</Menu.Item>
  11. <Menu.Item key="3">3rd item</Menu.Item>
  12. </Menu>
  13. );
  14. ReactDOM.render(
  15. <div>
  16. <Button style={{ marginRight: 10 }} type="primary">
  17. primary
  18. </Button>
  19. <Button style={{ marginRight: 10 }}>secondary</Button>
  20. <Dropdown overlay={menu}>
  21. <Button style={{ marginRight: 10 }}>
  22. Actions <Icon type="down" />
  23. </Button>
  24. </Dropdown>
  25. </div>,

按钮组合

可以将多个 Button 放入 Button.Group 的容器中。

通过设置 sizelarge small 分别把按钮组合设为大、小尺寸。若不设置 size,则尺寸为中。

Button按钮 - 图7

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Button, Icon } from 'choerodon-ui';
  4. const ButtonGroup = Button.Group;
  5. ReactDOM.render(
  6. <div>
  7. <h4>Basic</h4>
  8. <ButtonGroup>
  9. <Button>Cancel</Button>
  10. <Button>OK</Button>
  11. </ButtonGroup>
  12. <ButtonGroup>
  13. <Button disabled>L</Button>
  14. <Button disabled>M</Button>
  15. <Button disabled>R</Button>
  16. </ButtonGroup>
  17. <ButtonGroup>
  18. <Button>L</Button>
  19. <Button>M</Button>
  20. <Button>R</Button>
  21. </ButtonGroup>
  22. <h4>With Icon</h4>
  23. <ButtonGroup>
  24. <Button type="primary">
  25. <Icon type="left" />
  26. Go back
  27. </Button>
  28. <Button type="primary">
  29. Go forward
  30. <Icon type="right" />
  31. </Button>

API

通过设置 Button 的属性来产生不同的按钮样式,推荐顺序为:type -> shape -> size -> loading -> disabled

按钮的属性说明如下:

属性说明类型默认值
ghost幽灵属性,使按钮背景透明,版本 2.7 中增加booleanfalse
href点击跳转的地址,指定此属性 button 的行为和 a 链接一致string-
htmlType设置 button 原生的 type 值,可选值请参考 HTML 标准stringbutton
icon设置按钮的图标类型string-
loading设置按钮载入状态boolean | { delay: number }false
funcType设置按钮功能,可选值为 raised flatstringflat
shape设置按钮形状,可选值为 circle 或者不设string-
size设置按钮大小,可选值为 small large 或者不设stringdefault
target相当于 a 链接的 target 属性,href 存在时生效string-
type设置按钮类型,可选值为 primary dashed danger(版本 2.7 中增加) 或者不设string-
onClickclick 事件的 handlerfunction-

<Button>Hello world!</Button> 最终会被渲染为 <button><span>Hello world!</span></button>,并且除了上表中的属性,其它属性都会直接传到 <button></button>

<Button href="http://example.com">Hello world!</Button> 则会渲染为 <a href="http://example.com"><span>Hello world!</span></a>