reactjs - 单击单个按钮时显示多个 Popconfirm 按钮
问题描述
我使用 ant design table 组件创建了一个表格,其中最后一列包含用于编辑和删除表格行项的按钮。每当有人试图删除一行时,我都会从 antd 添加一个 popconfirm 组件。但是给我带来麻烦的是,每当我尝试通过单击删除按钮来删除一行时,其他行的所有 popconfirms 也会显示出来。单击特定行的删除按钮可多次弹出确认。
我的按钮项的代码是这样的:
{
title: 'Actions',
dataIndex: 'actions',
key: 'actions',
render: (_, record) => {
// console.log("Record", record.id)
const onEdit = () => {
console.log("Record", record.id)
setRecordId(record.id);
// console.log("Record on edit button", record)
setIsModalVisible(true)
setAddRecordData(record)
setTitle("Edit")
}
const onDelete = () => {
setVisible(true)
console.log("Record on delete button", record)
}
const handleOk = async () => {
const id = record.id;
const response = await props.callExpertiseApiDel(id)
console.log("delete response:", response)
if (response.status === 200) {
setVisible(false)
async function fetchData() {
await props.callExpertiseApi();
}
fetchData();
}
};
const handleCancel = () => {
console.log('Clicked cancel button', record.id);
setVisible(false);
setAddRecordData({})
}
return <div style={{ display: 'flex' }}>
<Icondescription icon={<EditOutlined />} label='Edit'
className='action-edit-icon' btnClick={onEdit} />
<Popconfirm
title="Are you sure to delete this item?"
visible={visible}
onConfirm={handleOk}
onCancel={handleCancel}
>
<Icondescription icon={<DeleteOutlined />} btnClick={onDelete} />
</Popconfirm>
</div>
}
如何在单击删除键时摆脱这个多重 popconfirm?
解决方案
这是因为visible
每一行都有一个状态。您可以将渲染移动到单独的组件并在组件内部使用本地状态。或者您可以保留您的渲染功能,但将所有可见标志存储在您的状态中,如下所示:
const [visible, setVisible] = useState({})
// then where you want to set
setVisible((prevVisible) => ({
...prevVisible,
[record.id]: true
}))
推荐阅读
- google-cloud-endpoints - 在 GCP 中查找谁使用了我的私有 API
- angular - Angular 8:没有 MultilevelMenuService 的提供者
- php - 如何在 PHP 中添加“只读”选项?
- ruby-on-rails - ActiveRecord 方法偏移量无法正常工作
- java - 如何用杰克逊反序列化枚举?
- javascript - 在 JavaScript 中验证数字步数?
- macos - MacOS 上的 .bashrc 和 .bash_profile 有什么关系?
- yaml - Azure 管道接口
- html - 为什么 jQuery UI Spinner 箭头按钮不显示?
- python - Keras MNIST 目标向量自动转换为 one-hot?