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

Antd Table开启scroll.y纵向滚动时动态渲染列导致表头消失问题咨询

问题根因

  • 动态生成的学科列的key属性配置错误:Antd Table 列配置的key是用于标识列唯一性的静态字符串,不能传入函数,你代码中写的key: (value, record, index) => \subject_${index}`属于非法配置,开启scroll.y`后 Antd 会将表头和表体拆分为两个独立DOM渲染,列标识异常会直接导致表头渲染失败。
  • 列配置更新时Table存在DOM缓存:semester、classId变更后旧的表格DOM缓存没有被清空,和新的列配置不匹配。

修复步骤

  1. 修正动态列的key配置
    修改setupColumns函数中生成学科列的代码,用唯一的学科ID作为列的key:
let children = data.map((val) => {
  return {
    title: (
      <span className={`table-header`}>{val.subject_info?.name}</span>
    ),
    // 把原来的函数key替换为静态唯一字符串
    key: `subject_${val.subject_id}`,
    width: 150,
    align: "center",
    ellipsis: true,
    render: (value, record) => {
      const point = record.average_transcript_info.find(
        (x) =>
          x.subject_id === val.subject_id &&
          x.semester === semester.key
      );
      return (
        <span>{point?.value_number}</span>
      );
    },
  };
});
  1. 给Table绑定动态唯一key
    每次semester或classId变更时强制重渲染整个Table,避免DOM缓存问题:
<Table
  // 新增动态key
  key={`table_${classId}_${semester.key}`}
  dataSource={summaryData}
  columns={columns}
  bordered
  rowClassName={(record, index) =>
    index % 2 === 1
      ? "odd-row attendance-row"
      : "bg-white attendance-row"
  }
  pagination={false}
  scroll={{ x: "100vw", y: 580 }}
/>

修复后即可保留scroll.y配置,动态切换列时表头不会再消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:03