You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确访问MUI DataGrid选中行的单元格内容?

MUI DataGrid 选中行单元格数据的正确访问方式

问题出在你使用的filter方法上:它返回的是符合条件的行数据数组(哪怕只选中一行,结果也是长度为1的数组),而不是单个行对象,所以直接访问selectedRowData.email会得到undefined。

下面是几种正确的处理方式:

1. 单选场景(只选一行)

用find替代filter,find会返回第一个匹配条件的行对象:

<DataGrid
  checkboxSelection
  rows={adminData}
  columns={columns}
  getRowId={(row) => row._id}
  slots={{ toolbar: CustomToolbar }}
  onRowSelectionModelChange={(id) => {
    const selectedIDs = new Set(id);
    // 用find获取单个行对象
    const selectedRowData = adminData.find((row) =>
      selectedIDs.has(row._id)
    );

    console.log(selectedRowData); // 单个行对象
    console.log(selectedRowData?.email); // 可选链避免空值报错
  }} 
/>

如果明确是单选,也可以直接取选中ID数组的第一个元素来查找:

onRowSelectionModelChange={(selectedIds) => {
  if (selectedIds.length === 0) return;
  const selectedRowData = adminData.find(row => row._id === selectedIds[0]);
  console.log(selectedRowData?.email);
}}

2. 多选场景(可选多行)

如果需要支持多选,遍历返回的数组访问每一行的属性:

onRowSelectionModelChange={(id) => {
  const selectedIDs = new Set(id);
  const selectedRowData = adminData.filter((row) =>
    selectedIDs.has(row._id)
  );

  // 遍历所有选中行,逐个访问email
  selectedRowData.forEach(row => {
    console.log(row.email);
  });

  // 或者取某一行的email,比如第一行
  console.log(selectedRowData[0]?.email);
}}

注意:使用?.可选链操作符可以避免没有选中行时,访问属性抛出Cannot read properties of undefined的错误。

内容的提问来源于stack exchange,提问作者Croissant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:47:43