如何在事件处理程序的 mui-datatable 中使用 material-ui 菜单

Posted

技术标签:

【中文标题】如何在事件处理程序的 mui-datatable 中使用 material-ui 菜单【英文标题】:How to use a material-ui Menu inside a mui-datatable on event handler 【发布时间】:2020-06-19 05:23:40 【问题描述】:

我正在尝试使 openFilePreviewDialog(id) 操作返回其行的 id

问题:它返回了错误的 id,而不是返回 id=7,而是返回了 8

[
  
    name: "id",
    label: " ",
    options: 
      filter: true,
      sort: false,
      customBodyRender: id => 
        const options = ["View", "Signature", "Download", "Share", "Delete"];

        return (
          <div>
            <IconButton
              className=classes.iconButton
              aria-label="more"
              aria-controls="long-menu"
              aria-haspopup="true"
              onClick=handleClick
            >
              <MoreVertRounded />
            </IconButton>
            <Menu
              id="long-menu"
              anchorEl=anchorEl
              keepMounted
              open=open
              onClose=handleClose
            >
              options.map(option => (
                <MenuItem
                  key=option
                  onClick=() => openFilePreviewDialog(id)
                >
                  option
                </MenuItem>
              ))
            </Menu>
          </div>
        );
      
    
  
];

【问题讨论】:

【参考方案1】:

MUIDatatable 总是获取 id 字段中的最后一个值,与您点击哪个索引无关。也许这是 MUIDatatable 中的一个错误。但我为您找到了另一种解决方案。您需要按如下方式处理 onRowClick:

const options = 
    filterType: 'dropdown',
    responsive: 'scrollFullHeight',
    serverSide: true,
    count: total,
    page: page,
    searchText: tableState.options.searchText,
    onRowClick: handleRowClick

然后您使用以下代码存储 Id(服务是填充在 MUIDatatable 上的数据集合)。我使用 UseState 来存储 id:

const [serviceId, setServiceId] = useState(0);

const handleRowClick = (rowData, rowMeta) => 
    setServiceId(services[rowMeta.dataIndex].id);
;

然后在您的函数 openFilePreviewDialog 中,您可以使用该 ID:

function openFilePreviewDialog(id) 
    console.log(serviceId, 'serviceRequestId');

【讨论】:

以上是关于如何在事件处理程序的 mui-datatable 中使用 material-ui 菜单的主要内容,如果未能解决你的问题,请参考以下文章

REACT - 如何在 Mui-Datatables 中将逗号分隔符添加到整数值

如何摆脱表格顶部的 MUI-Datatable“选定行”面板

如何在 mui-datatable React.js 的第一个位置添加 SrNo (#) 列

如何使用 responsive="scroll" 将高度设置为 mui-datatable

滚动上的 Mui-datatables 固定列 - (左或右)

在mui-datatables中默认情况下(当没有数据行时,如何取消选择selectableRows中的复选框?