Tag 标签

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

安装方法

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

Guide

标签用于标记事物的属性和维度,或者可以使用标签来对一组事物分类。

何时使用

  • 用于标记事物的属性和维度。

  • 进行分类。

使用注意点

  • 目前 0.x 版本的 tag 存在一个默认的 margin,如果你不想要有,可以在配置平台中配置移除。1.x 版本会默认移除。

  • 虽然可以设置 size 属性取值 large,但该值只是为了兼容表单场景,实际取值时 large 等同于 medium

  • 不建议在 Tag 中使用大段文本。

API

标签

参数说明类型默认值
prefix样式前缀String'next-'
shape标签的形态可选值:'selectable', 'deletable', 'interactive', 'link', 'readonly'Enum'selectable'
type标签的类型可选值:'normal', 'primary', 'secondary'Enum'normal'
size标签的尺寸(large 尺寸为兼容表单场景 large = medium)可选值:'medium', 'small', 'large'Enum'medium'
disabled标签是否禁用Booleanfalse
count标签附加显示的重复次数Number-
selected选择型标签是否被选中(受控)Boolean-
defaultSelected选型型标签默认是否被选中(非受控)Booleanfalse
closed可删除标签是否被关闭(受控)Boolean-
defaultClosed可删除标签默认是否被关闭(非受控)Booleanfalse
marked互动型标签是否被标记过(受控)Booleanfalse
value标签暂存的值String/Array/Object/Boolean-
animation是否开启动效Booleantrue
onChange互动型标签被 mark 的数量变化时的回调签名:Function(count: Number) => void参数:count: {Number} 被标记的次数Function() => {}
onClose可删除标签被关闭时的回调签名:Function(value: String, closed: Boolean) => void参数:value: {String} 值closed: {Boolean} 是否关闭状态Function() => {}
onSelect可选择标签被选中时的回调签名:Function(selected: Boolean) => void参数:selected: {Boolean} 是否被选择Function() => {}
afterAppear标签出现后执行的回调Function() => void签名:Function() => voidFunction() => {}
afterClose标签关闭后执行的回调Function() => void签名:Function() => voidFunction() => {}

代码示例

关闭动效

默认情况下 Tag 使用了出现和关闭的动效,如果某些情况下,您不需要动效,可以使用 animation 属性进行关闭。

Tag 标签 - 图1

查看源码在线预览

  1. import { Tag } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Tag shape="deletable">默认有动效的 Tag</Tag> <br />
  5. <Tag shape="deletable" animation={false}>
  6. 关闭动效的 Tag
  7. </Tag>
  8. </div>,
  9. mountNode
  10. );

受控型可选择标签

defaultSelected 提供了非受控的选中状态,selected 提供了受控的选中状态。对于可选择标签而言,除了使用组件提供的默认行为,用户还可以通过自行控制组件状态来实现自定义组件的选择行为。

Tag 标签 - 图2

查看源码在线预览

  1. import { Tag, Button } from "@icedesign/base";
  2. class ControlledTag extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. select: false
  7. };
  8. }
  9. onClick() {
  10. this.setState(prevState => {
  11. return {
  12. select: !prevState.select
  13. };
  14. });
  15. }
  16. render() {
  17. const label = this.state.select ? "反选 Tag" : "选中 Tag";
  18. return (
  19. <div>
  20. <Button onClick={::this.onClick} type="normal">
  21. {label}
  22. </Button>
  23. <Tag shape="selectable" selected={this.state.select}>
  24. Controlled Selectable Tag
  25. </Tag>
  26. </div>
  27. );
  28. }
  29. }
  30. ReactDOM.render(<ControlledTag />, mountNode);

自定义的可关闭标签

组件提供了 closed 属性用于实现关闭行为的受控。对于可关闭标签而言,除了使用组件提供的默认行为,用户还可以实现自定义的组件关闭行为。

Tag 标签 - 图3

查看源码在线预览

  1. import { Tag } from "@icedesign/base";
  2. class ControlledClosableTag extends React.Component {
  3. static propTypes = {
  4. value: React.PropTypes.string
  5. };
  6. constructor(props) {
  7. super(props);
  8. this.state = {
  9. closed: false
  10. };
  11. }
  12. onClose() {
  13. this.setState(prevState => {
  14. return { closed: !prevState.closed };
  15. });
  16. }
  17. render() {
  18. const { value } = this.props;
  19. return (
  20. <Tag
  21. shape="deletable"
  22. closed={this.state.closed}
  23. onClose={::this.onClose}
  24. value={value}
  25. >
  26. Controlled Deletable Tag
  27. </Tag>
  28. );
  29. }
  30. }
  31. ReactDOM.render(<ControlledClosableTag value="hello world" />, mountNode);

标签形态

closableinteractive 则会直接隐藏超出区域的文本。建议不要在标签中使用过长的文本,对于 selectable, link, readonly 这三种 tag 而言,超出宽度的文本会使用 表示。可以通过 type 属性来控制标签在某种形态下的类型。readonly 只读型标签:无交互行为。并且,只读型标签没有级别。link 跳转型标签interactive 可互动标签closable 可关闭标签selectable 可选择标签通过设置 shape 属性值来更改标签的类型,可选值包括:标签有四种类型:可选择标签、可关闭标签、可互动标签、跳转型标签和只读型标签。

Tag 标签 - 图4

查看源码在线预览

  1. import { Tag } from "@icedesign/base";
  2. function onClose(value, closed) {
  3. console.log(value, closed);
  4. }
  5. function onChange(count) {
  6. console.log(count);
  7. }
  8. ReactDOM.render(
  9. <div className="tag-list">
  10. <div className="tag-list-item">
  11. <Tag shape="selectable" type="normal">
  12. Normal Selectable Tag
  13. </Tag>
  14. <Tag shape="selectable" type="primary">
  15. Primary Selectable Tag
  16. </Tag>
  17. <Tag shape="selectable" type="secondary">
  18. Secondary Selectable Tag
  19. </Tag>
  20. </div>
  21. <div className="tag-list-item">
  22. <Tag
  23. shape="deletable"
  24. type="normal"
  25. value="Normal Deletable Tag"
  26. onClose={onClose}
  27. >
  28. Normal Deletable Tag
  29. </Tag>
  30. <Tag
  31. shape="deletable"
  32. type="primary"
  33. value="Primary Deletable Tag"
  34. onClose={onClose}
  35. >
  36. Primary Deletable Tag
  37. </Tag>
  38. <Tag
  39. shape="deletable"
  40. type="secondary"
  41. value="Secondary Deletable Tag"
  42. onClose={onClose}
  43. >
  44. Secondary Deletable Tag
  45. </Tag>
  46. </div>
  47. <div className="tag-list-item">
  48. <Tag shape="interactive" count={2} onChange={onChange}>
  49. Interfactive Tag
  50. </Tag>
  51. </div>
  52. <div className="tag-list-item">
  53. <Tag shape="link" type="normal">
  54. <a href="//www.alibaba.com" target="_blank">
  55. Normal Link Tag
  56. </a>
  57. </Tag>
  58. <Tag shape="link" type="primary">
  59. <a href="//www.alibaba.com" target="_blank">
  60. Primary Link Tag
  61. </a>
  62. </Tag>
  63. <Tag shape="link" type="secondary">
  64. <a href="//www.alibaba.com" target="_blank">
  65. Secondary Link Tag
  66. </a>
  67. </Tag>
  68. </div>
  69. <div className="tag-list-item">
  70. <Tag shape="readonly">Readonly Tag</Tag>
  71. </div>
  72. </div>,
  73. mountNode
  74. );

尺寸

则默认使用 medium 尺寸的值。需要注意的,large 尺寸只是为了兼容表单场景而存在,实际并不存在 large 尺寸,如果用户设置了 size='large',通过设置 sizesmall medium 可分别创建小标签、中等标签,若不设置 type 值则为中等标签。

Tag 标签 - 图5

查看源码在线预览

  1. import { Tag } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Tag shape="selectable">Medium Tag</Tag>
  5. <Tag shape="selectable" size="small">
  6. Small Tag
  7. </Tag>
  8. </div>,
  9. mountNode
  10. );

相关区块

Tag 标签 - 图6

暂无相关区块