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

Antd Table加载Skeleton时出现Key警告问题求助

Antd Table 行key警告问题解决

问题描述

React DevTool中查看Antd Table结构时,已给组件设置key,但仍触发以下警告:

Warning: Each child in a list should have a unique "key" prop. Check the render method of Body.

尝试给Table添加rowKey属性后,问题仍未解决。

代码问题分析

提供的代码片段如下:

// other code here
} else if (this.state.processing) {
    let dataSke = [];
    for (let i = 0; i < 1; i++) {
      let y = {};
      y.title = <Skeleton.Input key={uuidv4()} style={{ width: "300px" }} />;
      y.topic_name = <Skeleton.Input key={uuidv4()} style={{ width: "200px" }} />;
      y.type = <Skeleton.Input key={uuidv4()} style={{ width: "100px" }} />;
      dataSke.push(y);
    }
    return (
      <>
        <Table
        rowKey={obj => obj.id}
          columns={this.columns}
          dataSource={dataSke}
          rowSelection={rowSelection}
        />
      </>
    );
// other code here

核心问题:

  • rowKey配置为取obj.id,但dataSke中的每个对象y并没有id字段,Antd Table无法获取到唯一的行标识,因此触发警告。
  • 给Skeleton.Input添加的key属于冗余操作,这些组件并非React列表循环的直接子元素,对解决行key警告毫无作用。

解决方案

有两种可行的修复方式:

方式一:给数据项添加唯一id(推荐)

给每个y对象添加唯一id字段,确保rowKey能正确获取到值:

for (let i = 0; i < 1; i++) {
  let y = { id: uuidv4() }; // 生成唯一id
  y.title = <Skeleton.Input style={{ width: "300px" }} />; // 此处key可删除
  y.topic_name = <Skeleton.Input style={{ width: "200px" }} />;
  y.type = <Skeleton.Input style={{ width: "100px" }} />;
  dataSke.push(y);
}

保留原rowKey={obj => obj.id}配置即可。

方式二:修改rowKey为索引(临时方案)

若不想给数据添加id,可临时用数组索引作为行key(注意:数据顺序变化时可能引发渲染异常,仅适合临时场景):

<Table
  rowKey={(obj, index) => index}
  columns={this.columns}
  dataSource={dataSke}
  rowSelection={rowSelection}
/>

额外说明

之前给Skeleton.Input设置的key完全没必要,因为这些组件是作为对象属性存在,并非列表循环的直接子元素,直接删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:35:14