Badge 徽标数

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

安装方法

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

开发指南

何时使用

在有新消息、讯息时,或者是app/插件/功能模块可以更新、升级时使用这个组件。

无障碍

可通过添加如下class,使内容仅能被读屏软件读取,但不会展示到页面上<span className="next-sr-only">unread messages</span>

API

Badge

参数说明类型默认值
children徽章依托的内容ReactNode-
count展示的数字,大于 overflowCount 时显示为 ${overflowCount}+,为 0 时默认隐藏Number/String0
showZero当count为0时,是否显示countBooleanfalse
content自定义节点内容ReactNode-
overflowCount展示的封顶的数字Number/String99
dot不展示数字,只展示一个小红点Booleanfalse

代码示例

基本

简单的徽章展示。

Badge 徽标数 - 图1

查看源码在线预览

  1. import { Badge } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <Badge count={5}>
  5. <a href="#" className="basic-example"></a>
  6. </Badge>
  7. <Badge count={5}>
  8. <a href="#" className="basic-example"><span className="next-sr-only">unread messages</span></a>
  9. </Badge>
  10. </div>
  11. , mountNode);
  1. .basic-example {
  2. display: inline-block;
  3. width: 42px;
  4. height: 42px;
  5. border-radius: 8px;
  6. background: #eee;
  7. }
  8. .next-badge {
  9. margin-right: 16px;
  10. }

大数字

超过overflow的数值,会显示\${overflow}+,overflow默认值为99

Badge 徽标数 - 图2

查看源码在线预览

  1. import { Badge } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <Badge count={100}>
  5. <a href="#" className="head-example"></a>
  6. </Badge>
  7. <Badge count={200} overflowCount={199}>
  8. <a href="#" className="head-example"></a>
  9. </Badge>
  10. </div>, mountNode);
  1. .next-badge {
  2. margin-right: 16px;
  3. }
  4. .head-example {
  5. display: inline-block;
  6. width: 42px;
  7. height: 42px;
  8. border-radius: 8px;
  9. background: #eee;
  10. }

讨嫌的小红点

没有具体的数字。

Badge 徽标数 - 图3

查看源码在线预览

  1. import { Badge, Icon } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <Badge dot>
  5. <Icon type="email" />
  6. </Badge>
  7. <Badge dot>
  8. <a href="#">A Link</a>
  9. </Badge>
  10. </div>, mountNode);
  1. .next-badge {
  2. margin-right: 16px;
  3. }

动态

展示动态变化的效果。

Badge 徽标数 - 图4

查看源码在线预览

  1. import { Badge, Button, Icon } from '@alifd/next';
  2. const ButtonGroup = Button.Group;
  3. class Demo extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = {
  7. count: 5,
  8. show: true
  9. };
  10. this.increase = this.increase.bind(this);
  11. this.decrease = this.decrease.bind(this);
  12. this.onClick = this.onClick.bind(this);
  13. }
  14. increase() {
  15. const count = this.state.count + 1;
  16. this.setState({ count });
  17. }
  18. decrease() {
  19. let count = this.state.count - 1;
  20. if (count < 0) {
  21. count = 0;
  22. }
  23. this.setState({ count });
  24. }
  25. onClick() {
  26. this.setState({
  27. show: !this.state.show
  28. });
  29. }
  30. render() {
  31. return (
  32. <div>
  33. <div className="change-count">
  34. <Badge count={this.state.count}>
  35. <a href="#" className="head-example"><span className="next-sr-only">unread messages</span></a>
  36. </Badge>
  37. <Badge count={this.state.count} showZero>
  38. <a href="#" className="head-example"><span className="next-sr-only">unread messages</span></a>
  39. </Badge>
  40. <ButtonGroup>
  41. <Button aria-label="add" onClick={this.increase}>
  42. <Icon type="add"/>
  43. </Button>
  44. <Button aria-label="minus" onClick={this.decrease}>
  45. <Icon type="minus"/>
  46. </Button>
  47. </ButtonGroup>
  48. </div>
  49. <div>
  50. <Badge dot={this.state.show}>
  51. <a href="#" className="head-example"></a>
  52. </Badge>
  53. <Button onClick={this.onClick}>
  54. Toggle Display
  55. </Button>
  56. </div>
  57. </div>
  58. );
  59. }
  60. }
  61. ReactDOM.render(<Demo />, mountNode);
  1. .next-badge {
  2. margin-right: 16px;
  3. }
  4. .change-count {
  5. margin-bottom: 16px;
  6. }
  7. .head-example {
  8. display: inline-block;
  9. width: 42px;
  10. height: 42px;
  11. border-radius: 8px;
  12. background: #eee;
  13. }

自定义徽标内容

通过 content 属性可以自定义徽标的内容,自定义内容不包含任何色彩样式,完全由使用者自己定义。

Badge 徽标数 - 图5

查看源码在线预览

  1. import { Badge, Icon } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <Badge content="hot" style={{backgroundColor: '#FC0E3D', color: '#FFFFFF'}}>
  5. <a href="#" className="head-example"></a>
  6. </Badge>
  7. <Badge content={<Icon type="error" />} style={{backgroundColor: 'transparent', color: 'red', padding: 0}}>
  8. <a href="#" className="head-example"></a>
  9. </Badge>
  10. </div>, mountNode);
  1. .next-badge {
  2. margin-right: 24px;
  3. }
  4. .head-example {
  5. display: inline-block;
  6. width: 42px;
  7. height: 42px;
  8. border-radius: 8px;
  9. background-color: #eee;
  10. }

独立使用

不包裹任何元素即独立使用,可自定样式展示。

Badge 徽标数 - 图6

查看源码在线预览

  1. import { Badge } from '@alifd/next';
  2. ReactDOM.render(
  3. <div>
  4. <Badge count={25} />
  5. <Badge count={4} style={{backgroundColor: '#fff', color: '#999', border: '1px solid #d9d9d9'}} />
  6. <Badge count={109} style={{backgroundColor: '#87d068'}} />
  7. <Badge dot />
  8. <Badge content="hot" style={{backgroundColor: '#FC0E3D', color: '#FFFFFF'}} />
  9. </div>, mountNode);
  1. .next-badge {
  2. margin-right: 16px;
  3. }

相关区块

Badge 徽标数 - 图7

暂无相关区块