Tag标签
进行标记和分类的小标签。
何时使用
用于标记事物的属性和维度。
进行分类。
代码演示

基本标签的用法,可以通过添加 closable 变为可关闭标签。可关闭标签具有 onClose 事件。
import { Tag } from 'antd';function log(e) {console.log(e);}function preventDefault(e) {e.preventDefault();console.log('Clicked! But prevent default.');}ReactDOM.render(<><Tag>Tag 1</Tag><Tag><a href="https://github.com/ant-design/ant-design/issues/1862">Link</a></Tag><Tag closable onClose={log}>Tag 2</Tag><Tag closable onClose={preventDefault}>Prevent Default</Tag></>,mountNode,);

用数组生成一组标签,可以动态添加和删除。
import { Tag, Input, Tooltip } from 'antd';import { PlusOutlined } from '@ant-design/icons';class EditableTagGroup extends React.Component {state = {tags: ['Unremovable', 'Tag 2', 'Tag 3'],inputVisible: false,inputValue: '',editInputIndex: -1,editInputValue: '',};handleClose = removedTag => {const tags = this.state.tags.filter(tag => tag !== removedTag);console.log(tags);this.setState({ tags });};showInput = () => {this.setState({ inputVisible: true }, () => this.input.focus());};handleInputChange = e => {this.setState({ inputValue: e.target.value });};handleInputConfirm = () => {const { inputValue } = this.state;let { tags } = this.state;if (inputValue && tags.indexOf(inputValue) === -1) {tags = [...tags, inputValue];}console.log(tags);this.setState({tags,inputVisible: false,inputValue: '',});};handleEditInputChange = e => {this.setState({ editInputValue: e.target.value });};handleEditInputConfirm = () => {this.setState(({ tags, editInputIndex, editInputValue }) => {const newTags = [...tags];newTags[editInputIndex] = editInputValue;return {tags: newTags,editInputIndex: -1,editInputValue: '',};});};saveInputRef = input => {this.input = input;};saveEditInputRef = input => {this.editInput = input;};render() {const { tags, inputVisible, inputValue, editInputIndex, editInputValue } = this.state;return (<>{tags.map((tag, index) => {if (editInputIndex === index) {return (<Inputref={this.saveEditInputRef}key={tag}size="small"className="tag-input"value={editInputValue}onChange={this.handleEditInputChange}onBlur={this.handleEditInputConfirm}onPressEnter={this.handleEditInputConfirm}/>);}const isLongTag = tag.length > 20;const tagElem = (<TagclassName="edit-tag"key={tag}closable={index !== 0}onClose={() => this.handleClose(tag)}><spanonDoubleClick={e => {if (index !== 0) {this.setState({ editInputIndex: index, editInputValue: tag }, () => {this.editInput.focus();});e.preventDefault();}}}>{isLongTag ? `${tag.slice(0, 20)}...` : tag}</span></Tag>);return isLongTag ? (<Tooltip title={tag} key={tag}>{tagElem}</Tooltip>) : (tagElem);})}{inputVisible && (<Inputref={this.saveInputRef}type="text"size="small"className="tag-input"value={inputValue}onChange={this.handleInputChange}onBlur={this.handleInputConfirm}onPressEnter={this.handleInputConfirm}/>)}{!inputVisible && (<Tag className="site-tag-plus" onClick={this.showInput}><PlusOutlined /> New Tag</Tag>)}</>);}}ReactDOM.render(<EditableTagGroup />, mountNode);
.site-tag-plus {background: #fff;border-style: dashed;}.edit-tag {user-select: none;}.tag-input {width: 78px;margin-right: 8px;vertical-align: top;}

通过 visible 属性控制关闭状态。
import { Tag, Button } from 'antd';class Demo extends React.Component {state = {visible: true,};render() {return (<><Tagclosablevisible={this.state.visible}onClose={() => this.setState({ visible: false })}>Movies</Tag><br /><Button size="small" onClick={() => this.setState({ visible: !this.state.visible })}>Toggle</Button></>);}}ReactDOM.render(<Demo />, mountNode);

当需要在 Tag 内嵌入 Icon 时,可以设置 icon 属性,或者直接在 Tag 内使用 Icon 组件。
如果想控制 Icon 具体的位置,只能直接使用 Icon 组件,而非 icon 属性。
import { Tag } from 'antd';import {TwitterOutlined,YoutubeOutlined,FacebookOutlined,LinkedinOutlined,} from '@ant-design/icons';ReactDOM.render(<><Tag icon={<TwitterOutlined />} color="#55acee"></Tag><Tag icon={<YoutubeOutlined />} color="#cd201f">Youtube</Tag><Tag icon={<FacebookOutlined />} color="#3b5999"></Tag><Tag icon={<LinkedinOutlined />} color="#55acee"></Tag></>,mountNode,);

我们添加了多种预设色彩的标签样式,用作不同场景使用。如果预设值不能满足你的需求,可以设置为具体的色值。
import { Tag, Divider } from 'antd';ReactDOM.render(<><Divider orientation="left">Presets</Divider><div><Tag color="magenta">magenta</Tag><Tag color="red">red</Tag><Tag color="volcano">volcano</Tag><Tag color="orange">orange</Tag><Tag color="gold">gold</Tag><Tag color="lime">lime</Tag><Tag color="green">green</Tag><Tag color="cyan">cyan</Tag><Tag color="blue">blue</Tag><Tag color="geekblue">geekblue</Tag><Tag color="purple">purple</Tag></div><Divider orientation="left">Custom</Divider><div><Tag color="#f50">#f50</Tag><Tag color="#2db7f5">#2db7f5</Tag><Tag color="#87d068">#87d068</Tag><Tag color="#108ee9">#108ee9</Tag></div></>,mountNode,);

可通过 CheckableTag 实现类似 Checkbox 的效果,点击切换选中效果。
该组件为完全受控组件,不支持非受控用法。
import { Tag } from 'antd';const { CheckableTag } = Tag;const tagsData = ['Movies', 'Books', 'Music', 'Sports'];class HotTags extends React.Component {state = {selectedTags: ['Books'],};handleChange(tag, checked) {const { selectedTags } = this.state;const nextSelectedTags = checked ? [...selectedTags, tag] : selectedTags.filter(t => t !== tag);console.log('You are interested in: ', nextSelectedTags);this.setState({ selectedTags: nextSelectedTags });}render() {const { selectedTags } = this.state;return (<><span style={{ marginRight: 8 }}>Categories:</span>{tagsData.map(tag => (<CheckableTagkey={tag}checked={selectedTags.indexOf(tag) > -1}onChange={checked => this.handleChange(tag, checked)}>{tag}</CheckableTag>))}</>);}}ReactDOM.render(<HotTags />, mountNode);

使用 rc-tween-one 给标签增加添加或删除动画。
import { Tag, Input } from 'antd';import { TweenOneGroup } from 'rc-tween-one';import { PlusOutlined } from '@ant-design/icons';class EditableTagGroup extends React.Component {state = {tags: ['Tag 1', 'Tag 2', 'Tag 3'],inputVisible: false,inputValue: '',};handleClose = removedTag => {const tags = this.state.tags.filter(tag => tag !== removedTag);console.log(tags);this.setState({ tags });};showInput = () => {this.setState({ inputVisible: true }, () => this.input.focus());};handleInputChange = e => {this.setState({ inputValue: e.target.value });};handleInputConfirm = () => {const { inputValue } = this.state;let { tags } = this.state;if (inputValue && tags.indexOf(inputValue) === -1) {tags = [...tags, inputValue];}console.log(tags);this.setState({tags,inputVisible: false,inputValue: '',});};saveInputRef = input => {this.input = input;};forMap = tag => {const tagElem = (<TagclosableonClose={e => {e.preventDefault();this.handleClose(tag);}}>{tag}</Tag>);return (<span key={tag} style={{ display: 'inline-block' }}>{tagElem}</span>);};render() {const { tags, inputVisible, inputValue } = this.state;const tagChild = tags.map(this.forMap);return (<><div style={{ marginBottom: 16 }}><TweenOneGroupenter={{scale: 0.8,opacity: 0,type: 'from',duration: 100,onComplete: e => {e.target.style = '';},}}leave={{ opacity: 0, width: 0, scale: 0, duration: 200 }}appear={false}>{tagChild}</TweenOneGroup></div>{inputVisible && (<Inputref={this.saveInputRef}type="text"size="small"style={{ width: 78 }}value={inputValue}onChange={this.handleInputChange}onBlur={this.handleInputConfirm}onPressEnter={this.handleInputConfirm}/>)}{!inputVisible && (<Tag onClick={this.showInput} className="site-tag-plus"><PlusOutlined /> New Tag</Tag>)}</>);}}ReactDOM.render(<EditableTagGroup />, mountNode);
.site-tag-plus {background: #fff;border-style: dashed;}

预设五种状态颜色,可以通过设置 color 为 success、 processing、error、default、warning 来代表不同的状态。
import { Tag, Divider } from 'antd';import {CheckCircleOutlined,SyncOutlined,CloseCircleOutlined,ExclamationCircleOutlined,ClockCircleOutlined,MinusCircleOutlined,} from '@ant-design/icons';ReactDOM.render(<><Divider orientation="left">Without icon</Divider><div><Tag color="success">success</Tag><Tag color="processing">processing</Tag><Tag color="error">error</Tag><Tag color="warning">warning</Tag><Tag color="default">default</Tag></div><Divider orientation="left">With icon</Divider><div><Tag icon={<CheckCircleOutlined />} color="success">success</Tag><Tag icon={<SyncOutlined spin />} color="processing">processing</Tag><Tag icon={<CloseCircleOutlined />} color="error">error</Tag><Tag icon={<ExclamationCircleOutlined />} color="warning">warning</Tag><Tag icon={<ClockCircleOutlined />} color="default">waiting</Tag><Tag icon={<MinusCircleOutlined />} color="default">stop</Tag></div></>,mountNode,);
API
Tag
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| closable | 标签是否可以关闭(点击默认关闭) | boolean | false | |
| closeIcon | 自定义关闭按钮 | ReactNode | - | 4.4.0 |
| color | 标签色 | string | - | |
| icon | 设置图标 | ReactNode | - | |
| visible | 是否显示标签 | boolean | true | |
| onClose | 关闭时的回调(可通过 e.preventDefault() 来阻止默认行为) | (e) => void | - |
Tag.CheckableTag
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| checked | 设置标签的选中状态 | boolean | false |
| onChange | 点击标签时触发的回调 | (checked) => void | - |
当前内容版权归 Ant Design 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Ant Design .