Tag 标签
如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。
安装方法
- 在命令行中执行以下命令
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 | 是否开启动效 | Boolean | false |
afterAppear | 标签出现动画结束后执行的回调签名:Function() => void | Function | func.noop |
onClick | 点击回调签名:Function() => void | Function | func.noop |
Tag.Closeable
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
closeArea | closeable 标签的 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() => void | Function | - |
onClick | 点击回调签名:Function() => void | Function | - |
Tag.Selectable
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
checked | 标签是否被选中,受控用法tag checked or not, a controlled way | Boolean | - |
defaultChecked | 标签是否默认被选中,非受控用法tag checked or not by default, a uncontrolled way | Boolean | - |
onChange | 选中状态变化时触发的事件签名:Function(checked: Boolean, e: Event) => void参数:checked: {Boolean} 是否选中e: {Event} Dom 事件对象 | Function | func.noop |
disabled | 标签是否被禁用 | Boolean | - |
ARIA and KeyBoard
按键 | 说明 |
---|---|
SPACE | 选择,取消或删除当前标签 |
代码示例
通过设置 type
属性来控制标签的展示类型,可选值包括:normal
, primary
建议不要在标签中使用过长的文本,超出宽度的文本会使用 …
表示。
查看源码在线预览
import { Tag, Icon } from '@alifd/next';
const {Group: TagGroup} = Tag;
ReactDOM.render(<div className="tag-list">
<h4>large size</h4>
<TagGroup>
<Tag type="normal" size="large">Normal large Tag</Tag>
<Tag type="primary" size="large">Primary large Tag</Tag>
<Tag size="large"><Icon type="smile" /> Tag With Icon</Tag>
</TagGroup>
<h4>medium(default) size</h4>
<TagGroup>
<Tag type="normal" size="medium">Normal Tag</Tag>
<Tag type="primary">Primary Tag</Tag>
<Tag><Icon type="smile" /> Tag With Icon</Tag>
</TagGroup>
<h4>small size</h4>
<TagGroup>
<Tag type="normal" size="small">Normal Small Tag</Tag>
<Tag type="primary" size="small">Primary Small Tag</Tag>
<Tag size="small"><Icon type="smile" /> Tag With Icon</Tag>
</TagGroup>
<h4>link tag</h4>
<TagGroup>
<Tag type="normal"><a href="//www.alibaba.com" target="_blank">normal Link Tag</a></Tag>
<Tag type="primary"><a href="//www.alibaba.com" target="_blank">primary Link Tag</a></Tag>
<Tag size="small"><a href="//www.alibaba.com" target="_blank"><Icon type="smile" /> Link Tag With Icon</a></Tag>
</TagGroup>
</div>,
mountNode);
Tag.Selectable
可以用于一些轻量的需要选中状态的场景,可作为 checkbox 使用。
该组件提供了受控和非受控两种用法,但强烈建议以受控方式使用。
SelectableTag 继承自 Tag,所以类型(type)、大小(size)、动效(animation)等参数的用法与 Tag 保持一致。
查看源码在线预览
import { Tag } from '@alifd/next';
const {Group: TagGroup, Selectable: SelectableTag} = Tag;
const dataSource = ['selectable tag', 'I like orange', 'small tag', 'disabled', 'disabled & checked'];
class Demo extends React.Component {
state = {
value: ['I like orange', 'disabled & checked'],
singleValue: 'selectable tag'
};
handleChange(name, checked) {
const {value} = this.state;
const next = checked ? [...value, name] : value.filter(n => n !== name);
this.setState({value: next});
}
handleChangeSingle(name, checked) {
const {singleValue} = this.state;
const next = checked ? name : '';
this.setState({singleValue: next});
}
renderTagList(props) {
const {value} = this.state;
return dataSource.map((name, i) => (
<SelectableTag key={name}
checked={value.indexOf(name) > -1}
disabled={i > 2}
size={i === 2 ? 'small' : undefined}
onChange={this.handleChange.bind(this, name)}
{...props}>{name}</SelectableTag>
));
}
renderTagListSingle(props) {
const {singleValue} = this.state;
return dataSource.map((name, i) => (
<SelectableTag key={name}
checked={singleValue === name}
disabled={i > 2}
size={i === 2 ? 'small' : undefined}
onChange={this.handleChangeSingle.bind(this, name)}
{...props}>{name}</SelectableTag>
));
}
render() {
return (
<div className="tag-list">
<h4>type: 'default'</h4>
<TagGroup>{this.renderTagList({type: 'normal'})}</TagGroup>
<h4>type: 'primary'</h4>
<TagGroup>{this.renderTagList({type: 'primary'})}</TagGroup>
<h4>Controlled Tags: Only one selected at a time</h4>
<TagGroup>{this.renderTagListSingle({type: 'normal'})}</TagGroup>
</div>
);
}
}
ReactDOM.render(<Demo />, mountNode);
Tag.Closeable
可以用于一些轻量的需要选中状态的场景。特别注意: closeArea=tail 以及在Tag.Closeable
中放入a标签 都与无障碍要求不符,请谨慎使用
查看源码在线预览
import { Tag } from '@alifd/next';
const {Group: TagGroup, Closeable: CloseableTag} = Tag;
const handler = from => {
console.log(`close from ${from}`);
return false;
};
class Demo extends React.Component {
renderTagList (option) {
return [
<CloseableTag key={'tag-1'} type={option.type}>{option.type}</CloseableTag>,
<CloseableTag key={'tag-2'} type={option.type} disabled>{option.type} {' disabled '}</CloseableTag>
];
}
renderCloseAreaTags () {
return ['tag', 'tail'].reduce((prev, curr) => prev.concat([
<CloseableTag key={`tag-${curr}-1`} closeArea={curr}>closeArea {curr}</CloseableTag>,
<CloseableTag key={`tag-${curr}-2`} type="primary" closeArea={curr}>closeArea {curr}</CloseableTag>
]), []);
}
render() {
return (
<div className="tag-list">
<h4>type: 'normal'</h4>
<TagGroup>{this.renderTagList({type: 'normal'})}</TagGroup>
<h4>type: 'primary'</h4>
<TagGroup>{this.renderTagList({type: 'primary'})}</TagGroup>
<h4>closeArea: ['tag', 'tail']</h4>
<TagGroup>
{this.renderCloseAreaTags()}
</TagGroup>
<h4>close handler</h4>
<TagGroup>
<CloseableTag onClose={() => true}> onClose allow close</CloseableTag>
<CloseableTag onClose={() => false}> onClose prevent close</CloseableTag>
<CloseableTag onClose={handler}> onClose from </CloseableTag>
<CloseableTag afterClose={() => console.log('after close')}>after Close</CloseableTag>
</TagGroup>
<h4>closeable link tag</h4>
<TagGroup>
<CloseableTag type="primary"><a href="//www.alibaba.com" target="_blank">Primary Link Tag</a></CloseableTag>
<CloseableTag type="normal"><a href="//www.alibaba.com" target="_blank">normal Link Tag</a></CloseableTag>
</TagGroup>
</div>
);
}
}
ReactDOM.render(<Demo />, mountNode);
组件已支持无障碍。关于键盘操作请参考ARIA and KeyBoard
。
查看源码在线预览
import { Tag, Icon } from '@alifd/next';
const {Group: TagGroup} = Tag;
const dataType = ['全部', '衣服', '手机', '化妆品'];
class Demo extends React.Component {
constructor(props) {
super(props);
this.state = {
name:''
};
this.onclick = this.onclick.bind(this);
}
onclick(v) {
this.setState({name: v.item});
}
render() {
return (<div>
<TagGroup>
{dataType.map(item => <Tag type="normal" key={item} size="medium" onClick={() => this.onclick({item})} >{ item }</Tag>) }
</TagGroup>
{this.state.name}
</div>);
}
}
ReactDOM.render(<Demo />, mountNode);