Button 按钮
如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。
安装方法
- 在命令行中执行以下命令
npm install @alifd/next@latest -S
按钮用于开始一个即时操作。
Guide
何时使用
标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
API
Button
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
size | 按钮的尺寸可选值:'small', 'medium', 'large' | Enum | 'medium' |
type | 按钮的类型可选值:'primary', 'secondary', 'normal' | Enum | 'normal' |
iconSize | 按钮中 Icon 的尺寸,用于替代 Icon 的默认大小可选值:'xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl' | Enum | - |
htmlType | 当 component = 'button' 时,设置 button 标签的 type 值可选值:'submit', 'reset', 'button' | Enum | 'button' |
component | 设置标签类型可选值:'button', 'a', 'div', 'span' | Enum | 'button' |
loading | 设置按钮的载入状态 | Boolean | false |
ghost | 是否为幽灵按钮可选值:true, false, 'light', 'dark' | Enum | false |
text | 是否为文本按钮 | Boolean | false |
warning | 是否为警告按钮 | Boolean | false |
disabled | 是否禁用 | Boolean | false |
onClick | 点击按钮的回调签名:Function(e: Object) => void参数:e: {Object} Event Object | Function | () => {} |
Button.Group
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
size | 统一设置 Button 组件的按钮大小 | String | 'medium' |
ARIA and KeyBoard
按键 | 说明 |
---|---|
Enter | 触发onClick事件 |
SPACE | 触发onClick事件 |
代码示例
按钮有三种视觉层次:主按钮、次按钮、普通按钮。不同的类型可以用来区别按钮的重要程度。
查看源码在线预览
import { Button } from '@alifd/next';
ReactDOM.render(<div>
<Button type="normal">Normal</Button>
<Button type="primary">Prirmary</Button>
<Button type="secondary">Secondary</Button>
<br /><br />
<Button type="normal" text>Normal</Button>
<Button type="primary" text>Primary</Button>
<Button type="secondary" text>Secondary</Button>
<br /><br />
<Button type="normal" warning>Normal</Button>
<Button type="primary" warning>Primary</Button>
</div>, mountNode);
可以通过设置 size
属性控制按钮的尺寸,可选值为 large
medium
small
,其中默认值为 medium
。
查看源码在线预览
import { Button, Icon } from '@alifd/next';
ReactDOM.render(<div>
<Button type="primary" size="large"><Icon type="atm" />Large</Button>
<Button type="primary"><Icon type="atm" />Medium</Button>
<Button type="primary" size="small"><Icon type="atm" />Small</Button>
<br />
<br />
<Button.Group size="large">
<Button>Button</Button>
<Button>Button</Button>
<Button>Button</Button>
</Button.Group>
</div>, mountNode);
Button 可以嵌入 Icon,默认情况下 Icon 尺寸自动跟随 Button 的尺寸。如果用户想要控制 Icon 的大小,可以通过 iconSize
属性进行设置。
查看源码在线预览
import { Button, Icon } from '@alifd/next';
ReactDOM.render(<div>
<Button><Icon type="atm" /> ATM</Button>
<Button text><Icon type="atm" /> ATM</Button>
<Button warning><Icon type="atm" /> ATM</Button>
<Button iconSize="xxs"><Icon type="arrow-left" /> ARROW</Button>
</div>, mountNode);
通过设置 loading
属性即可以让按钮处于加载状态。
查看源码在线预览
import { Button } from '@alifd/next';
class Demo extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
loading: false
};
}
setLoading = () => {
this.setState({ loading: true });
}
render() {
return (<div>
<Button type="secondary" loading>Loading</Button>
<Button type="primary" loading={this.state.loading} onClick={this.setLoading}>Click to loading</Button>
</div>);
}
}
ReactDOM.render(<Demo/>, mountNode);
幽灵按钮通常用在有色背景下,可以使用 ghost
属性开启,此时 Button 为透明背景。对于浅色背景和深色背景,通过取值 light
, dark
可以配置使用幽灵按钮的场景。
查看源码在线预览
import { Button } from '@alifd/next';
ReactDOM.render(<div style={{ clear: 'both' }}>
<div className="ghost-light-background">
<Button ghost="light">Ghost light</Button>
</div>
<div className="ghost-dark-background">
<Button ghost="dark">Ghost dark</Button>
</div>
</div>, mountNode);
.ghost-light-background {
display: inline-block;
height: 100px;
line-height: 100px;
width: 50%;
background: #EBECF0;
margin-bottom: 20px;
padding-left:10px;
box-sizing: border-box;
}
.ghost-dark-background {
display: inline-block;
height: 100px;
line-height: 100px;
width: 50%;
background: #333;
margin-bottom: 20px;
padding-left:10px;
box-sizing: border-box;
}
添加 disabled
属性即可让按钮处于不可用状态,同时按钮样式也会改变。
查看源码在线预览
import { Button } from '@alifd/next';
ReactDOM.render(<div>
<Button type="primary">Primary</Button>
<Button component="a" type="primary" disabled>Primary</Button>
<br />
<br />
<Button type="secondary">Secondary</Button>
<Button type="secondary" disabled>Secondary</Button>
<br />
<br />
<Button type="normal">Normal</Button>
<Button type="normal" disabled>Normal</Button>
<br />
<br />
<div>
<div className="ghost-light-background">
<Button ghost="light" disabled>Ghost Light</Button>
</div>
<div className="ghost-dark-background">
<Button ghost="dark" disabled>Ghost Dark</Button>
</div>
</div>
</div>, mountNode);
.ghost-light-background {
display: inline-block;
height: 100px;
line-height: 100px;
width: 50%;
background: #EBECF0;
margin-bottom: 20px;
padding-left:10px;
box-sizing: border-box;
}
.ghost-dark-background {
display: inline-block;
height: 100px;
line-height: 100px;
width: 50%;
background: #333;
margin-bottom: 20px;
padding-left:10px;
box-sizing: border-box;
}
默认情况下 Button 组件使用 <button>
标签来渲染按钮,通过 component
属性可以自定义 Button 的标签类型。可选值为 button
和 a
。
查看源码在线预览
import { Button } from '@alifd/next';
const props = {
component: 'a',
href: 'http://www.alibaba.com',
target: '_blank'
};
ReactDOM.render(<div>
<Button {...props} type="primary">alibaba.com</Button>
<Button {...props} type="secondary">alibaba.com</Button>
<Button {...props} type="normal">alibaba.com</Button>
</div>, mountNode);
Button.Group
子组件用于将多个按钮组合在一个容器中。
查看源码在线预览
import { Button, Icon } from '@alifd/next';
ReactDOM.render(<div>
<Button.Group>
<Button type="primary">OK</Button>
<Button type="secondary">Cancel</Button>
</Button.Group>
<Button.Group>
<Button disabled>Left</Button>
<Button disabled>Middle</Button>
<Button disabled>Right</Button>
</Button.Group>
<br />
<br />
<Button.Group>
<Button type="primary"><Icon type="arrow-left" /> Backward</Button>
<Button type="primary">Forward <Icon type="arrow-right" /></Button>
</Button.Group>
<Button.Group>
<Button type="primary"><Icon type="prompt" /></Button>
<Button type="primary"><Icon type="clock" /></Button>
<Button type="primary"><Icon type="set" /></Button>
</Button.Group>
</div>, mountNode);
在使用不包含文本的icon Button组件时,我们需要添加aria-label
对其进行描述,键盘操作请参考ARIA and KeyBoard
。
查看源码在线预览
import { Button, Icon } from '@alifd/next';
ReactDOM.render(<div>
<Button.Group>
<Button type="primary" aria-label="prompt button"><Icon type="prompt" /></Button>
<Button type="primary" aria-label="clock button"><Icon type="clock" /></Button>
<Button type="primary" aria-label="set button"><Icon type="set" /></Button>
</Button.Group>
</div>, mountNode);