要实现如下图所示的成果
最开始是这样写的:
renderAction = (text, record) => (
<>
<Tooltip title='批改'>
<a onClick={() => this.handleEdit(record)}>
<Icon
type="edit"
/>
</a>
</Tooltip>
<Divider
type="vertical"
/>
<Tooltip title='查看'>
<a onClick={() => this.handleInfo(record)}>
<Icon
type="eye"
/>
</a>
</Tooltip>
<Divider
type="vertical"
/>
<Tooltip title='执行'>
<a onClick={() => this.handleWork(record)}>
<Icon
type="play-circle"
/>
</a>
</Tooltip>
<Divider
type="vertical"
/>
<Tooltip title='bug列表'>
<a onClick={() => this.handleBugList(record)}>
<Icon
type="exception"
/>
</a>
</Tooltip>
<Divider
type="vertical"
/>
<Tooltip title='执行列表'>
<a onClick={() => this.handleWorkList(record)}>
<Icon
type="profile"
/>
</a>
</Tooltip>
<Divider
type="vertical"
/>
<Tooltip title='删除'>
<a onClick={() => this.handleDelCase(record)}>
<Icon
type="delete"
/>
</a>
</Tooltip>
</>
)
然而这样写很容易就发现,代码呈现了大量的反复,所以这里能够把代码形象成一个公共组件。
在形象时须要留神须要把哪些属性给形象进去,应该把与上下文无关的局部形象进去,这里的就是,Tooltip、a、Icon、Divider、type=”vertical”,其余的比方,图标的款式、点击事件、title,这些属性就须要父组件传递到公共组件外面。
import React, { PureComponent, Fragment } from 'react';
import { Icon, Tooltip, Divider } from 'antd';
class Action extends PureComponent {
constructor(props) {
super(props);
this.state = {};
}
default = () => {}
render() {
const { actions = [], data = null } = this.props;
const renderList = actions.map((action, index) => {
const { title = 'action', type = 'tool', onClick = this.default } = action;
return (
<Fragment key={title}>
<Tooltip title={title}>
<a onClick={() => onClick(data)}>
<Icon type={type} />
</a>
</Tooltip>
{
index !== actions.length - 1 ?
<Divider
type="vertical"
/> : ''
}
</Fragment>
)
})
return (
<>
{renderList}
</>
)
}
}
export default Action;
const actionList = [
{
title: '批改',
type: 'edit',
onClick: this.handleEdit
},
{
title: '查看',
type: 'eye',
onClick: this.handleInfo
},
{
title: '执行',
type: 'play-circle',
onClick: this.handleWork
},
{
title: 'bug列表',
type: 'unordered-list',
onClick: this.handleBugList
},
{
title: '执行列表',
type: 'unordered-list',
onClick: this.handleWorkList
},
{
title: '删除',
type: 'delete',
onClick: this.handleDelCase
},
]
....
<Action actions={actionList} data={record} />
发表回复