Tag 标签

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

安装方法

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

Guide

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

何时使用

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

  • 进行分类。

使用注意点

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

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

API

Tag

参数说明类型默认值
size标签的尺寸(large 尺寸为兼容表单场景 large = medium)可选值:'small', 'medium', 'large'Enum'medium'
type标签的类型可选值:'normal', 'primary'Enum'normal'
animation是否开启动效Booleanfalse
afterAppear标签出现动画结束后执行的回调签名:Function() => voidFunctionfunc.noop
onClick点击回调签名:Function() => voidFunctionfunc.noop

Tag.Closeable

参数说明类型默认值
closeAreacloseable 标签的 onClose 响应区域, tag: 标签体, tail(默认): 关闭按钮可选值:'tag', 'tail'Enum-
size标签的尺寸(large 尺寸为兼容表单场景 large = medium)可选值:'small', 'medium', 'large'Enum-
onClose点击关闭按钮时的回调签名:Function(from: String) => Boolean参数:from: {String} 事件来源, tag: 标签体点击, tail: 关闭按钮点击返回值:{Boolean} true则关闭, false阻止关闭Function-
afterClose标签关闭后执行的回调签名:Function() => voidFunction-
onClick点击回调签名:Function() => voidFunction-

Tag.Selectable

参数说明类型默认值
checked标签是否被选中,受控用法tag checked or not, a controlled wayBoolean-
defaultChecked标签是否默认被选中,非受控用法tag checked or not by default, a uncontrolled wayBoolean-
onChange选中状态变化时触发的事件签名:Function(checked: Boolean, e: Event) => void参数:checked: {Boolean} 是否选中e: {Event} Dom 事件对象Functionfunc.noop
disabled标签是否被禁用Boolean-

ARIA and KeyBoard

按键说明
SPACE选择,取消或删除当前标签

代码示例

基本用法

通过设置 type 属性来控制标签的展示类型,可选值包括:normal, primary

建议不要在标签中使用过长的文本,超出宽度的文本会使用 表示。

Tag 标签 - 图1

查看源码在线预览

  1. import { Tag, Icon } from '@alifd/next';
  2. const {Group: TagGroup} = Tag;
  3. ReactDOM.render(<div className="tag-list">
  4. <h4>large size</h4>
  5. <TagGroup>
  6. <Tag type="normal" size="large">Normal large Tag</Tag>
  7. <Tag type="primary" size="large">Primary large Tag</Tag>
  8. <Tag size="large"><Icon type="smile" /> Tag With Icon</Tag>
  9. </TagGroup>
  10. <h4>medium(default) size</h4>
  11. <TagGroup>
  12. <Tag type="normal" size="medium">Normal Tag</Tag>
  13. <Tag type="primary">Primary Tag</Tag>
  14. <Tag><Icon type="smile" /> Tag With Icon</Tag>
  15. </TagGroup>
  16. <h4>small size</h4>
  17. <TagGroup>
  18. <Tag type="normal" size="small">Normal Small Tag</Tag>
  19. <Tag type="primary" size="small">Primary Small Tag</Tag>
  20. <Tag size="small"><Icon type="smile" /> Tag With Icon</Tag>
  21. </TagGroup>
  22. <h4>link tag</h4>
  23. <TagGroup>
  24. <Tag type="normal"><a href="//www.alibaba.com" target="_blank">normal Link Tag</a></Tag>
  25. <Tag type="primary"><a href="//www.alibaba.com" target="_blank">primary Link Tag</a></Tag>
  26. <Tag size="small"><a href="//www.alibaba.com" target="_blank"><Icon type="smile" /> Link Tag With Icon</a></Tag>
  27. </TagGroup>
  28. </div>,
  29. mountNode);

可选中标签

Tag.Selectable 可以用于一些轻量的需要选中状态的场景,可作为 checkbox 使用。

该组件提供了受控和非受控两种用法,但强烈建议以受控方式使用。

SelectableTag 继承自 Tag,所以类型(type)、大小(size)、动效(animation)等参数的用法与 Tag 保持一致。

Tag 标签 - 图2

查看源码在线预览

  1. import { Tag } from '@alifd/next';
  2. const {Group: TagGroup, Selectable: SelectableTag} = Tag;
  3. const dataSource = ['selectable tag', 'I like orange', 'small tag', 'disabled', 'disabled & checked'];
  4. class Demo extends React.Component {
  5. state = {
  6. value: ['I like orange', 'disabled & checked'],
  7. singleValue: 'selectable tag'
  8. };
  9. handleChange(name, checked) {
  10. const {value} = this.state;
  11. const next = checked ? [...value, name] : value.filter(n => n !== name);
  12. this.setState({value: next});
  13. }
  14. handleChangeSingle(name, checked) {
  15. const {singleValue} = this.state;
  16. const next = checked ? name : '';
  17. this.setState({singleValue: next});
  18. }
  19. renderTagList(props) {
  20. const {value} = this.state;
  21. return dataSource.map((name, i) => (
  22. <SelectableTag key={name}
  23. checked={value.indexOf(name) > -1}
  24. disabled={i > 2}
  25. size={i === 2 ? 'small' : undefined}
  26. onChange={this.handleChange.bind(this, name)}
  27. {...props}>{name}</SelectableTag>
  28. ));
  29. }
  30. renderTagListSingle(props) {
  31. const {singleValue} = this.state;
  32. return dataSource.map((name, i) => (
  33. <SelectableTag key={name}
  34. checked={singleValue === name}
  35. disabled={i > 2}
  36. size={i === 2 ? 'small' : undefined}
  37. onChange={this.handleChangeSingle.bind(this, name)}
  38. {...props}>{name}</SelectableTag>
  39. ));
  40. }
  41. render() {
  42. return (
  43. <div className="tag-list">
  44. <h4>type: 'default'</h4>
  45. <TagGroup>{this.renderTagList({type: 'normal'})}</TagGroup>
  46. <h4>type: 'primary'</h4>
  47. <TagGroup>{this.renderTagList({type: 'primary'})}</TagGroup>
  48. <h4>Controlled Tags: Only one selected at a time</h4>
  49. <TagGroup>{this.renderTagListSingle({type: 'normal'})}</TagGroup>
  50. </div>
  51. );
  52. }
  53. }
  54. ReactDOM.render(<Demo />, mountNode);

可关闭标签

Tag.Closeable 可以用于一些轻量的需要选中状态的场景。特别注意: closeArea=tail 以及在Tag.Closeable中放入a标签 都与无障碍要求不符,请谨慎使用

Tag 标签 - 图3

查看源码在线预览

  1. import { Tag } from '@alifd/next';
  2. const {Group: TagGroup, Closeable: CloseableTag} = Tag;
  3. const handler = from => {
  4. console.log(`close from ${from}`);
  5. return false;
  6. };
  7. class Demo extends React.Component {
  8. renderTagList (option) {
  9. return [
  10. <CloseableTag key={'tag-1'} type={option.type}>{option.type}</CloseableTag>,
  11. <CloseableTag key={'tag-2'} type={option.type} disabled>{option.type} {' disabled '}</CloseableTag>
  12. ];
  13. }
  14. renderCloseAreaTags () {
  15. return ['tag', 'tail'].reduce((prev, curr) => prev.concat([
  16. <CloseableTag key={`tag-${curr}-1`} closeArea={curr}>closeArea {curr}</CloseableTag>,
  17. <CloseableTag key={`tag-${curr}-2`} type="primary" closeArea={curr}>closeArea {curr}</CloseableTag>
  18. ]), []);
  19. }
  20. render() {
  21. return (
  22. <div className="tag-list">
  23. <h4>type: 'normal'</h4>
  24. <TagGroup>{this.renderTagList({type: 'normal'})}</TagGroup>
  25. <h4>type: 'primary'</h4>
  26. <TagGroup>{this.renderTagList({type: 'primary'})}</TagGroup>
  27. <h4>closeArea: ['tag', 'tail']</h4>
  28. <TagGroup>
  29. {this.renderCloseAreaTags()}
  30. </TagGroup>
  31. <h4>close handler</h4>
  32. <TagGroup>
  33. <CloseableTag onClose={() => true}> onClose allow close</CloseableTag>
  34. <CloseableTag onClose={() => false}> onClose prevent close</CloseableTag>
  35. <CloseableTag onClose={handler}> onClose from </CloseableTag>
  36. <CloseableTag afterClose={() => console.log('after close')}>after Close</CloseableTag>
  37. </TagGroup>
  38. <h4>closeable link tag</h4>
  39. <TagGroup>
  40. <CloseableTag type="primary"><a href="//www.alibaba.com" target="_blank">Primary Link Tag</a></CloseableTag>
  41. <CloseableTag type="normal"><a href="//www.alibaba.com" target="_blank">normal Link Tag</a></CloseableTag>
  42. </TagGroup>
  43. </div>
  44. );
  45. }
  46. }
  47. ReactDOM.render(<Demo />, mountNode);

无障碍

组件已支持无障碍。关于键盘操作请参考ARIA and KeyBoard

Tag 标签 - 图4

查看源码在线预览

  1. import { Tag, Icon } from '@alifd/next';
  2. const {Group: TagGroup} = Tag;
  3. const dataType = ['全部', '衣服', '手机', '化妆品'];
  4. class Demo extends React.Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. name:''
  9. };
  10. this.onclick = this.onclick.bind(this);
  11. }
  12. onclick(v) {
  13. this.setState({name: v.item});
  14. }
  15. render() {
  16. return (<div>
  17. <TagGroup>
  18. {dataType.map(item => <Tag type="normal" key={item} size="medium" onClick={() => this.onclick({item})} >{ item }</Tag>) }
  19. </TagGroup>
  20. {this.state.name}
  21. </div>);
  22. }
  23. }
  24. ReactDOM.render(<Demo />, mountNode);

相关区块

Tag 标签 - 图5

暂无相关区块