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

material-table/core中detailPanel无法显示行内附件列表求助

解决material-table/core detailPanel不显示附件的问题

可能的原因及修复方案

1. 列表渲染缺少唯一key属性

React要求列表渲染的每个元素必须带有唯一key属性,否则可能导致组件不渲染或渲染异常。你的map循环未添加该属性,补上即可:

detailPanel={(rowData) => {
  return rowData?.document_attachment?.length > 0 ? rowData.document_attachment.map((attachment) => {
    // 给Box添加唯一key,优先用attachment的id,无id则用name(需确保name唯一)
    return <Box
      key={attachment.id || attachment.name}
      sx={{ m: 1 }}
      onClick={() => handleClickPreviewDoc(attachment)}
    >
      <Typography sx={{ fontSize: "13px", display: "Flex", alignItems: "center", gap: "10px" }}>
        <FilePresentIcon sx={{ fontSize: "13px", opacity: "0.6" }} />
        {attachment.name}
      </Typography>
    </Box>
  }) : <Box sx={{ m: 1 }}>
    <Typography sx={{ fontSize: "13px", display: "Flex", alignItems: "center", gap: "10px" }}>
      No Attachment Found
    </Typography>
  </Box>
}}

2. 空数组判断逻辑错误

rowData?.document_attachment如果是空数组[],在JS中会被判定为false,导致错误显示"No Attachment Found"。需修改为判断数组长度是否大于0:

// 原判断:rowData?.document_attachment
// 修改为:rowData?.document_attachment?.length > 0

3. 确认rowData数据结构正确

在组件中添加日志打印,验证rowData.document_attachment的实际结构:

detailPanel={(rowData) => {
  console.log('当前行附件数据:', rowData?.document_attachment); // 检查数据格式是否符合预期
  // ... 其余代码
}}

确保它是包含name属性的对象数组,而非null、undefined或其他非数组类型。

4. 检查material-table的detailPanel配置

确认你的material-table组件正确启用了detailPanel,无其他配置冲突:

<MaterialTable
  // ... 其他表格配置
  detailPanel={/* 你的detailPanel代码 */}
  // 可选:自定义展开图标
  detailPanelIcon={ExpandMoreIcon}
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:33:23