UNPKG

cjd-parkball

Version:

> 中后台业务组件库,中后台就像公园,进入需要买门票(登录),所以以 Parkball(公园球) 命名,公园内必定捕获!作为一个组件库,提供使用方法文档,方便开发者的调用

97 lines (83 loc) 2.5 kB
--- category: 2 title: 动态添加和删除 title_en: Add & Remove Dynamically --- zh-CN 用数组生成一组标签,可以动态添加和删除,通过监听删除动画结束的事件 `afterClose` 实现。 en-US Generating a set of Tags by array, you can add and remove dynamically. It's based on `afterClose` event, which will be triggered while the close animation end. ````jsx import { Tag, Input, Tooltip, Icon } from 'parkball'; class EditableTagGroup extends React.Component { state = { tags: ['Unremovable', '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 state = this.state; const inputValue = state.inputValue; let tags = state.tags; if (inputValue && tags.indexOf(inputValue) === -1) { tags = [...tags, inputValue]; } console.log(tags); this.setState({ tags, inputVisible: false, inputValue: '', }); } saveInputRef = input => this.input = input render() { const { tags, inputVisible, inputValue } = this.state; return ( <div> {tags.map((tag, index) => { const isLongTag = tag.length > 20; const tagElem = ( <Tag key={tag} closable={index !== 0} afterClose={() => this.handleClose(tag)}> {isLongTag ? `${tag.slice(0, 20)}...` : tag} </Tag> ); return isLongTag ? <Tooltip title={tag} key={tag}>{tagElem}</Tooltip> : tagElem; })} {inputVisible && ( <Input ref={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} style={{ background: '#fff', borderStyle: 'dashed' }} > <Icon type="plus" /> New Tag </Tag> )} </div> ); } } ReactDOM.render(<EditableTagGroup />, mountNode); ````