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

MUI Data Grid报错:行需唯一id属性,求解决方法

解决MUI Data Grid缺少唯一行ID的报错问题

问题分析

报错提示明确要求所有行必须有唯一的id属性,或者通过getRowId prop指定自定义唯一标识。你的场景中存在两个问题:一是某条数据的id值为"N",该值不满足唯一性要求;二是错误处理逻辑中错误地将错误信息赋值给rows,会导致非数组数据传入DataGrid,引发额外渲染错误。

解决方案

方案1:处理API返回数据,确保每行ID唯一

在获取API数据后,对返回的每条数据进行预处理,替换无效的id值为唯一标识:

修改useEffect中的成功回调部分:

useEffect(() => {
  TicketService.getTickets().then(
    (response) => {
      // 遍历数据,替换值为"N"的id为唯一标识
      const processedRows = response.data.map((row, index) => ({
        ...row,
        id: row.id === "N" ? `ticket-${index}-${Date.now()}` : row.id
      }));
      setRows(processedRows);
    },
    (error) => {
      // 错误时设置空数组,避免传入非数组数据
      setRows([]);

      if (error.response && error.response.status === 401) {
        EventBus.dispatch("logout");
      }
    }
  );
}, []);

方案2:使用getRowId指定自定义唯一标识

如果你的Ticket数据本身有其他唯一字段(比如ticketId、uuid等),可以直接通过getRowId prop告诉DataGrid用该字段作为行的唯一标识:

修改DataGrid组件的配置:

<DataGrid
  rows={rows}
  columns={columns}
  // 替换成你数据中实际存在的唯一字段名
  getRowId={(row) => row.ticketId || row.id}
  pageSize={10}
  rowsPerPageOptions={[10]}
  checkboxSelection
  disableSelectionOnClick
/>

额外修复:修正错误处理逻辑

原代码中错误时将错误信息赋值给rows,会导致rows变为字符串而非数组,引发DataGrid渲染异常,需改为设置空数组。

验证

修改后重新运行项目,确认报错消失,同时测试删除、查看详情等操作是否能正常触发,确保行ID的正确性不影响功能逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:44