Button 按钮

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

安装方法

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

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

Guide

何时使用

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

API

按钮

参数说明类型默认值
prefix组件样式的品牌前缀String'next-'
type按钮的类型可选值:'primary', 'secondary', 'normal', 'dark', 'light'Enum'normal'
size按钮的尺寸可选值:'small', 'medium', 'large'Enum'medium'
shape按钮的形态可选值:'ghost', 'text', 'warning'Enum-
htmlType设置 button 标签的原生 typeString'button'
component设置标签类型可选值:'button', 'span', 'a', 'div'Enum'button'
loading设置按钮的载入状态Booleanfalse
disabled是否禁用Boolean-
onClick点击按钮的回调签名:Function(e: Object) => void参数:e: {Object} Event ObjectFunction() => {}
className自定义样式String-

Button.Group

参数说明类型默认值
size统一设置 Button 组件的按钮大小String'medium'

Button.Split

参数说明类型默认值
prefix样式品牌前缀String'next-'
alignDropdown 的对齐方式,参考 DropdownString'tr br'
offsetDropdown 的位置偏移,参考 DropdownArray0, 4
type类型,同 Button可选值:'primary', 'secondary', 'normal', 'dark', 'light'Enum'normal'
shape外观,同 Button可选值:'ghost', 'text', 'warning'Enum-
size尺寸,同 Button可选值:'small', 'medium', 'large'Enum'medium'
triggerDropdown 触发方式,参考 Dropdown可选值:'click', 'hover'Enum'click'
menu弹出的内容,参考 DropdownReactNode-
onClick点击按钮的回调签名:Function(e: Object) => void参数:e: {Object} Event ObjectFunction() => {}

代码示例

按钮类型

值得注意的是,对于幽灵按钮而言,通常用在有色背景下。针对浅色背景和深色背景的使用场景,幽灵按钮提供了两个特殊的类型,分别是 light, dark。正常情况下通过设置 typeprimary secondary 可分别创建主按钮、次按钮,若不设置 type 值则为普通按钮。不同的样式可以用来区别其重要程度。通过 shape 属性可以更改按钮的默认形态,包括幽灵按钮、文本按钮、警告按钮。按钮有三种视觉层次:主按钮、次按钮、普通按钮。

Button 按钮 - 图1

查看源码在线预览

  1. import { Button } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Button type="normal">普通按钮</Button> &nbsp;&nbsp;
  5. <Button type="primary">主要按钮</Button> &nbsp;&nbsp;
  6. <Button type="secondary">次要按钮</Button>
  7. <br />
  8. <br />
  9. <Button type="normal" shape="text">
  10. 普通文本按钮
  11. </Button>{" "}
  12. &nbsp;&nbsp;
  13. <Button type="primary" shape="text">
  14. 主要文本按钮
  15. </Button>{" "}
  16. &nbsp;&nbsp;
  17. <Button type="secondary" shape="text">
  18. 次要文本按钮
  19. </Button>
  20. <br />
  21. <br />
  22. <Button type="normal" shape="warning">
  23. 普通警告按钮
  24. </Button>{" "}
  25. &nbsp;&nbsp;
  26. <Button type="primary" shape="warning">
  27. 主要警告按钮
  28. </Button>{" "}
  29. &nbsp;&nbsp;
  30. <Button type="secondary" shape="warning">
  31. 次要警告按钮
  32. </Button>
  33. <br />
  34. <br />
  35. <div style={{ clear: "both" }}>
  36. <div className="ghost-light-background">
  37. <Button type="light" shape="ghost">
  38. 幽灵按钮(浅色)
  39. </Button>
  40. </div>
  41. <div className="ghost-dark-background">
  42. <Button type="dark" shape="ghost">
  43. 幽灵按钮(深色)
  44. </Button>
  45. </div>
  46. </div>
  47. </div>,
  48. mountNode
  49. );
  1. .ghost-light-background {
  2. display: inline-block;
  3. height: 100px;
  4. line-height: 100px;
  5. width: 50%;
  6. background: #EBECF0;
  7. margin-bottom: 20px;
  8. padding-left:10px;
  9. box-sizing: border-box;
  10. }
  11. .ghost-dark-background {
  12. display: inline-block;
  13. height: 100px;
  14. line-height: 100px;
  15. width: 50%;
  16. background: #333;
  17. margin-bottom: 20px;
  18. padding-left:10px;
  19. box-sizing: border-box;
  20. }

自定义标签类型

可选值包括 button, span, a, div。默认情况下 Button 组件使用 <button> 标签来渲染按钮,通过 component 属性可以自定义 Button 的标签类型。

Button 按钮 - 图2

查看源码在线预览

  1. import { Button } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Button
  5. type="primary"
  6. component="a"
  7. href="http://www.alibaba.com"
  8. target="_blank"
  9. >
  10. <span>确定</span>
  11. </Button>{" "}
  12. &nbsp;&nbsp;
  13. <Button
  14. type="secondary"
  15. component="a"
  16. href="http://www.alibaba.com"
  17. target="_blank"
  18. >
  19. 次要按钮
  20. </Button>{" "}
  21. &nbsp;&nbsp;
  22. <Button
  23. type="normal"
  24. component="a"
  25. href="http://www.alibaba.com"
  26. target="_blank"
  27. >
  28. 普通按钮
  29. </Button>
  30. </div>,
  31. mountNode
  32. );

不可用状态

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

Button 按钮 - 图3

查看源码在线预览

  1. import { Button } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Button type="primary">主按钮</Button>&nbsp;&nbsp;
  5. <Button type="primary" disabled>
  6. 主按钮(失效)
  7. </Button>
  8. <br />
  9. <br />
  10. <Button type="secondary">次按钮</Button>&nbsp;&nbsp;
  11. <Button type="secondary" disabled>
  12. 次按钮(失效)
  13. </Button>
  14. <br />
  15. <br />
  16. <Button type="normal">普通按钮</Button>&nbsp;&nbsp;
  17. <Button type="normal" disabled>
  18. 普通按钮(失效)
  19. </Button>
  20. <br />
  21. <br />
  22. <div>
  23. <div className="ghost-light-background">
  24. <Button type="light" shape="ghost" disabled>
  25. 幽灵按钮(浅色)
  26. </Button>
  27. </div>
  28. <div className="ghost-dark-background">
  29. <Button type="dark" shape="ghost" disabled>
  30. 幽灵按钮(深色)
  31. </Button>
  32. </div>
  33. </div>
  34. </div>,
  35. mountNode
  36. );
  1. .ghost-light-background {
  2. display: inline-block;
  3. height: 100px;
  4. line-height: 100px;
  5. width: 50%;
  6. background: #EBECF0;
  7. margin-bottom: 20px;
  8. padding-left:10px;
  9. box-sizing: border-box;
  10. }
  11. .ghost-dark-background {
  12. display: inline-block;
  13. height: 100px;
  14. line-height: 100px;
  15. width: 50%;
  16. background: #333;
  17. margin-bottom: 20px;
  18. padding-left:10px;
  19. box-sizing: border-box;
  20. }

按钮组

可以将多个 Button 放入 Button.Group 的容器中形成一个按钮组。

Button 按钮 - 图4

查看源码在线预览

  1. import { Button, Icon } from "@icedesign/base";
  2. const ButtonGroup = Button.Group;
  3. ReactDOM.render(
  4. <div>
  5. <h4>基本组合</h4>
  6. <ButtonGroup>
  7. <Button type="primary">确定</Button>
  8. <Button type="primary">取消</Button>
  9. </ButtonGroup>
  10. <br />
  11. <br />
  12. <ButtonGroup>
  13. <Button disabled>左</Button>
  14. <Button disabled>中</Button>
  15. <Button disabled>右</Button>
  16. </ButtonGroup>
  17. <br />
  18. <br />
  19. <ButtonGroup>
  20. <Button type="secondary">左</Button>
  21. <Button type="secondary">中</Button>
  22. <Button type="secondary">右</Button>
  23. </ButtonGroup>
  24. <h4>带图标按钮组合</h4>
  25. <ButtonGroup>
  26. <Button type="primary">
  27. <Icon type="arrow-left" />
  28. <span>后退</span>
  29. </Button>
  30. <Button type="primary">
  31. 前进<Icon type="arrow-right" />
  32. </Button>
  33. </ButtonGroup>
  34. <br />
  35. <br />
  36. <ButtonGroup>
  37. <Button type="primary">
  38. <Icon type="arrow-left" />
  39. </Button>
  40. <Button type="primary">
  41. <Icon type="arrow-right" />
  42. </Button>
  43. </ButtonGroup>
  44. <h4>多个组合</h4>
  45. <ButtonGroup>
  46. <Button>1</Button>
  47. <Button>2</Button>
  48. <Button>3</Button>
  49. <Button>4</Button>
  50. <Button>
  51. <span>前进</span>
  52. <Icon type="arrow-right" />
  53. </Button>
  54. </ButtonGroup>
  55. </div>,
  56. mountNode
  57. );

图标按钮

Button 可以嵌入 Icon,此时无需自定义 Icon 的大小,Icon 会跟随 Button 组件的大小。

Button 按钮 - 图5

查看源码在线预览

  1. import { Button, Icon } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Button>
  5. <Icon type="atm" />按钮
  6. </Button>{" "}
  7. &nbsp;&nbsp;
  8. <Button shape="text">
  9. <Icon type="atm" />文字按钮
  10. </Button>{" "}
  11. &nbsp;&nbsp;
  12. <Button shape="warning">
  13. <Icon type="atm" />文字按钮
  14. </Button>
  15. </div>,
  16. mountNode
  17. );

加载中

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

Button 按钮 - 图6

查看源码在线预览

  1. import { Button } from "@icedesign/base";
  2. class Demo extends React.Component {
  3. constructor(props, context) {
  4. super(props, context);
  5. this.state = {
  6. loading: false,
  7. iconLoading: false
  8. };
  9. }
  10. enterLoading() {
  11. this.setState({ loading: true });
  12. }
  13. enterIconLoading() {
  14. this.setState({ iconLoading: true });
  15. }
  16. render() {
  17. return (
  18. <div>
  19. <Button type="secondary" loading>
  20. 加载中
  21. </Button>&nbsp;&nbsp;
  22. <Button
  23. type="primary"
  24. loading={this.state.loading}
  25. onClick={this.enterLoading.bind(this)}
  26. >
  27. 点击变加载
  28. </Button>
  29. </div>
  30. );
  31. }
  32. }
  33. ReactDOM.render(<Demo />, mountNode);

按钮尺寸

对于按钮组而言,可以通过在 Button.Group 上统一设置整个组按钮的大小。通过设置 sizelarge medium small 分别把按钮设为大、中、小尺寸。若不设置 size,则尺寸为中。按钮有大、中、小三种尺寸。

Button 按钮 - 图7

查看源码在线预览

  1. import { Button, Icon } from "@icedesign/base";
  2. const ButtonGroup = Button.Group;
  3. ReactDOM.render(
  4. <div>
  5. <Button type="primary" size="large">
  6. <Icon type="atm" />大号按钮
  7. </Button>&nbsp;&nbsp;
  8. <Button type="primary">
  9. <Icon type="atm" />中号按钮(默认)
  10. </Button>&nbsp;&nbsp;
  11. <Button type="primary" size="small">
  12. <Icon type="atm" />小号按钮
  13. </Button>
  14. <br />
  15. <br />
  16. <ButtonGroup size="large">
  17. <Button>大</Button>
  18. <Button>大</Button>
  19. <Button>大</Button>
  20. </ButtonGroup>&nbsp;&nbsp;
  21. <ButtonGroup>
  22. <Button>默认</Button>
  23. <Button>默认</Button>
  24. <Button>默认</Button>
  25. </ButtonGroup>&nbsp;&nbsp;
  26. <ButtonGroup size="small">
  27. <Button>小</Button>
  28. <Button>小</Button>
  29. <Button>小</Button>
  30. </ButtonGroup>
  31. </div>,
  32. mountNode
  33. );

Split Button

SplitButton

Button 按钮 - 图8

查看源码在线预览

  1. import { Button, Menu } from "@icedesign/base";
  2. const SplitButton = Button.Split;
  3. const menu = (
  4. <Menu>
  5. <Menu.Item disabled>abc</Menu.Item>
  6. <Menu.Item key="abc">abc</Menu.Item>
  7. <Menu.Divider key="5" />
  8. <Menu.Item key="1">abc</Menu.Item>
  9. <Menu.Item key="2">abc</Menu.Item>
  10. </Menu>
  11. );
  12. ReactDOM.render(
  13. <div>
  14. <h3>普通按钮</h3>
  15. <SplitButton menu={menu} type="primary" onClick={e => console.log(e)}>
  16. Upload
  17. </SplitButton>&nbsp;&nbsp;
  18. <SplitButton menu={menu} type="secondary">
  19. Upload
  20. </SplitButton>&nbsp;&nbsp;
  21. <SplitButton menu={menu} type="normal" disabled>
  22. Upload
  23. </SplitButton>
  24. <h3>文字按钮</h3>
  25. <SplitButton menu={menu} type="primary" shape="text">
  26. Upload
  27. </SplitButton>&nbsp;&nbsp;
  28. <SplitButton menu={menu} type="secondary" shape="text">
  29. Upload
  30. </SplitButton>&nbsp;&nbsp;
  31. <SplitButton menu={menu} type="normal" shape="text" disabled>
  32. Upload
  33. </SplitButton>
  34. <h3>幽灵按钮</h3>
  35. <div>
  36. <div className="ghost-light-background">
  37. <SplitButton type="light" shape="ghost" menu={menu}>
  38. Ghost Light
  39. </SplitButton>
  40. </div>
  41. <div className="ghost-dark-background">
  42. <SplitButton type="dark" shape="ghost" menu={menu}>
  43. Ghost Dark
  44. </SplitButton>
  45. </div>
  46. </div>
  47. </div>,
  48. mountNode
  49. );
  1. .ghost-light-background {
  2. display: inline-block;
  3. height: 100px;
  4. line-height: 100px;
  5. width: 50%;
  6. background: #EBECF0;
  7. margin-bottom: 20px;
  8. padding-left:10px;
  9. box-sizing: border-box;
  10. }
  11. .ghost-dark-background {
  12. display: inline-block;
  13. height: 100px;
  14. line-height: 100px;
  15. width: 50%;
  16. background: #333;
  17. margin-bottom: 20px;
  18. padding-left:10px;
  19. box-sizing: border-box;
  20. }

相关区块

Button 按钮 - 图9

暂无相关区块