在 react 中使用 mui-datatable 库,使用 customBodyRender 创建一个自定义列以添加菜单,当您单击其中一个选项时,它将执行一个操作。
问题是当你点击action时,进入函数的数据总是表中最后一条记录的数据,不管选择第一行的菜单,数据总是最后的。
我需要的是,当我单击一行的菜单时,它会返回该行的数据。
示例代码:https ://codesandbox.io/s/wonderful-mclaren-ivvlq?file=/src/App.js


在 react 中使用 mui-datatable 库,使用 customBodyRender 创建一个自定义列以添加菜单,当您单击其中一个选项时,它将执行一个操作。
问题是当你点击action时,进入函数的数据总是表中最后一条记录的数据,不管选择第一行的菜单,数据总是最后的。
我需要的是,当我单击一行的菜单时,它会返回该行的数据。
示例代码:https ://codesandbox.io/s/wonderful-mclaren-ivvlq?file=/src/App.js


我也经历过这种情况。我解决它的方法是在选择菜单图标时在状态变量中设置行选择索引,而不是在 MenuItem 内。索引从 customBodyRenderLite 或 customBodyRender 传递。
const [anchorIndex, setAnchorIndex] = useState(0);
const handleClick = (event, index) => {
setAnchorEl(event.currentTarget);
setAnchorIndex(index);
};
const iconButtonElement = (index) => {
return (
<div>
<IconButton
aria-label="More"
aria-owns={open ? "long-menu" : null}
aria-haspopup="true"
onClick={event => handleClick(event, index)}
>
<MoreVertIcon color={"action"}/>
</IconButton>
{rightIconMenu(index)}
</div>
)
}
当某些东西应该对菜单项进行操作时,它将使用状态中的值。
const rightIconMenu = () => {
return (
<Menu elevation={2} anchorEl={anchorEl} open={open} onClose={onMenuClose}>
<MenuItem onClick={handleCellClick}>View</MenuItem>
</Menu>
)
};
function handleCellClick() {
history.push('/vehicleForm', {data: currentDataSet[anchorIndex]});
}