Button按钮
按钮用于开始一个即时操作。
何时使用
标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
在 Ant Design 中我们提供了五种按钮。
主按钮:用于主行动点,一个操作区域只能有一个主按钮。
默认按钮:用于没有主次之分的一组行动点。
虚线按钮:常用于添加操作。
文本按钮:用于最次级的行动点。
链接按钮:用于作为外链的行动点。
以及四种状态属性与上面配合使用。
危险:删除/移动/修改权限等危险操作,一般需要二次确认。
幽灵:用于背景色比较复杂的地方,常用在首页/产品页等展示场景。
禁用:行动点不可用的时候,一般需要文案解释。
加载中:用于异步操作等待反馈的时候,也可以避免多次提交。
代码演示

按钮有五种类型:主按钮、次按钮、虚线按钮、文本按钮和链接按钮。主按钮在同一个操作区域最多出现一次。
import { Button } from 'antd';ReactDOM.render(<><Button type="primary">Primary Button</Button><Button>Default Button</Button><Button type="dashed">Dashed Button</Button><br /><Button type="text">Text Button</Button><Button type="link">Link Button</Button></>,mountNode,);

按钮有大、中、小三种尺寸。
通过设置 size 为 large small 分别把按钮设为大、小尺寸。若不设置 size,则尺寸为中。
import { Button, Radio } from 'antd';import { DownloadOutlined } from '@ant-design/icons';class ButtonSize extends React.Component {state = {size: 'large',};handleSizeChange = e => {this.setState({ size: e.target.value });};render() {const { size } = this.state;return (<><Radio.Group value={size} onChange={this.handleSizeChange}><Radio.Button value="large">Large</Radio.Button><Radio.Button value="default">Default</Radio.Button><Radio.Button value="small">Small</Radio.Button></Radio.Group><br /><br /><Button type="primary" size={size}>Primary</Button><Button size={size}>Default</Button><Button type="dashed" size={size}>Dashed</Button><br /><Button type="link" size={size}>Link</Button><br /><Button type="primary" icon={<DownloadOutlined />} size={size} /><Button type="primary" shape="circle" icon={<DownloadOutlined />} size={size} /><Button type="primary" shape="round" icon={<DownloadOutlined />} size={size} /><Button type="primary" shape="round" icon={<DownloadOutlined />} size={size}>Download</Button><Button type="primary" icon={<DownloadOutlined />} size={size}>Download</Button></>);}}ReactDOM.render(<ButtonSize />, mountNode);

添加 loading 属性即可让按钮处于加载状态,最后两个按钮演示点击后进入加载状态。
import { Button } from 'antd';import { PoweroffOutlined } from '@ant-design/icons';class App extends React.Component {state = {loadings: [],};enterLoading = index => {this.setState(({ loadings }) => {const newLoadings = [...loadings];newLoadings[index] = true;return {loadings: newLoadings,};});setTimeout(() => {this.setState(({ loadings }) => {const newLoadings = [...loadings];newLoadings[index] = false;return {loadings: newLoadings,};});}, 6000);};render() {const { loadings } = this.state;return (<><Button type="primary" loading>Loading</Button><Button type="primary" size="small" loading>Loading</Button><Button type="primary" icon={<PoweroffOutlined />} loading /><br /><Button type="primary" loading={loadings[0]} onClick={() => this.enterLoading(0)}>Click me!</Button><Buttontype="primary"icon={<PoweroffOutlined />}loading={loadings[1]}onClick={() => this.enterLoading(1)}>Click me!</Button><Buttontype="primary"icon={<PoweroffOutlined />}loading={loadings[2]}onClick={() => this.enterLoading(2)}/></>);}}ReactDOM.render(<App />, mountNode);

幽灵按钮将按钮的内容反色,背景变为透明,常用在有色背景上。
import { Button } from 'antd';ReactDOM.render(<div className="site-button-ghost-wrapper"><Button type="primary" ghost>Primary</Button><Button ghost>Default</Button><Button type="dashed" ghost>Dashed</Button></div>,mountNode,);
.site-button-ghost-wrapper {padding: 26px 16px 16px;background: rgb(190, 200, 200);}

block 属性将使按钮适合其父宽度。
import { Button } from 'antd';ReactDOM.render(<><Button type="primary" block>Primary</Button><Button block>Default</Button><Button type="dashed" block>Dashed</Button><Button type="link" block>Link</Button></>,mountNode,);

当需要在 Button 内嵌入 Icon 时,可以设置 icon 属性,或者直接在 Button 内使用 Icon 组件。
如果想控制 Icon 具体的位置,只能直接使用 Icon 组件,而非 icon 属性。
import { Button, Tooltip } from 'antd';import { SearchOutlined } from '@ant-design/icons';ReactDOM.render(<><Tooltip title="search"><Button type="primary" shape="circle" icon={<SearchOutlined />} /></Tooltip><Button type="primary" shape="circle">A</Button><Button type="primary" icon={<SearchOutlined />}>Search</Button><Tooltip title="search"><Button shape="circle" icon={<SearchOutlined />} /></Tooltip><Button icon={<SearchOutlined />}>Search</Button><br /><Tooltip title="search"><Button shape="circle" icon={<SearchOutlined />} /></Tooltip><Button icon={<SearchOutlined />}>Search</Button><Tooltip title="search"><Button type="dashed" shape="circle" icon={<SearchOutlined />} /></Tooltip><Button type="dashed" icon={<SearchOutlined />}>Search</Button></>,mountNode,);

添加 disabled 属性即可让按钮处于不可用状态,同时按钮样式也会改变。
import { Button } from 'antd';ReactDOM.render(<><Button type="primary">Primary</Button><Button type="primary" disabled>Primary(disabled)</Button><br /><Button>Default</Button><Button disabled>Default(disabled)</Button><br /><Button type="dashed">Dashed</Button><Button type="dashed" disabled>Dashed(disabled)</Button><br /><Button type="text">Text</Button><Button type="text" disabled>Text(disabled)</Button><br /><Button type="link">Link</Button><Button type="link" disabled>Link(disabled)</Button><br /><Button danger>Danger Default</Button><Button danger disabled>Danger Default(disabled)</Button><br /><Button danger type="text">Danger Text</Button><Button danger type="text" disabled>Danger Text(disabled)</Button><br /><Button type="link" danger>Danger Link</Button><Button type="link" danger disabled>Danger Link(disabled)</Button><div className="site-button-ghost-wrapper"><Button ghost>Ghost</Button><Button ghost disabled>Ghost(disabled)</Button></div></>,mountNode,);
.site-button-ghost-wrapper {padding: 8px 8px 0 8px;background: rgb(190, 200, 200);}

按钮组合使用时,推荐使用 1 个主操作 + n 个次操作,3 个以上操作时把更多操作放到 Dropdown.Button 中组合使用。
import { Button, Menu, Dropdown } from 'antd';function handleMenuClick(e) {console.log('click', e);}const menu = (<Menu onClick={handleMenuClick}><Menu.Item key="1">1st item</Menu.Item><Menu.Item key="2">2nd item</Menu.Item><Menu.Item key="3">3rd item</Menu.Item></Menu>);ReactDOM.render(<><Button type="primary">primary</Button><Button>secondary</Button><Dropdown.Button overlay={menu}>Actions</Dropdown.Button></>,mountNode,);

在 4.0 之后,危险成为一种按钮属性而不是按钮类型。
import { Button } from 'antd';ReactDOM.render(<><Button type="primary" danger>Primary</Button><Button danger>Default</Button><Button type="dashed" danger>Dashed</Button><Button type="text" danger>Text</Button><Button type="link" danger>Link</Button></>,mountNode,);
API
通过设置 Button 的属性来产生不同的按钮样式,推荐顺序为:type -> shape -> size -> loading -> disabled。
按钮的属性说明如下:
| 属性 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| block | 将按钮宽度调整为其父宽度的选项 | boolean | false | |
| danger | 设置危险按钮 | boolean | false | |
| disabled | 按钮失效状态 | boolean | false | |
| ghost | 幽灵属性,使按钮背景透明 | boolean | false | |
| href | 点击跳转的地址,指定此属性 button 的行为和 a 链接一致 | string | - | |
| htmlType | 设置 button 原生的 type 值,可选值请参考 HTML 标准 | string | button | |
| icon | 设置按钮的图标组件 | ReactNode | - | |
| loading | 设置按钮载入状态 | boolean | { delay: number } | false | |
| shape | 设置按钮形状 | circle | round | - | |
| size | 设置按钮大小 | large | middle | small | middle | |
| target | 相当于 a 链接的 target 属性,href 存在时生效 | string | - | |
| type | 设置按钮类型 | primary | ghost | dashed | link | text | default | default | |
| onClick | 点击按钮时的回调 | (event) => void | - |
支持原生 button 的其他所有属性。
FAQ
如何移除两个汉字之间的空格?
根据 Ant Design 设计规范要求,我们会在按钮内(文本按钮和链接按钮除外)只有两个汉字时自动添加空格,如果你不需要这个特性,可以设置 ConfigProvider 的 autoInsertSpaceInButton 为 false。
