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

添加新行时自动展开Antd Table行(ReactJS)

实现Antd Table添加新行时自动展开该行

要实现点击「添加行」按钮时向Antd Table插入新行并自动展开其面板,核心是利用Antd Table的expandedRowKeys属性控制展开状态,具体实现如下:


1. 维护展开行状态

在组件中新增状态存储当前展开行的key集合:

const [expandedRowKeys, setExpandedRowKeys] = useState([]);

2. 修改添加行逻辑

在添加新行的函数中,除了更新表格数据,还要将新行的唯一key加入到expandedRowKeys中:

const addRow = () => {
  // 生成唯一key,示例用时间戳保证唯一性
  const newRowKey = Date.now();
  const newRow = {
    key: newRowKey,
    name: "",
    age: "",
    children: [] // 展开面板所需的子数据,按需定义
  };
  // 更新表格数据源
  setDataSource([...dataSource, newRow]);
  // 追加新行key到展开集合,实现自动展开
  setExpandedRowKeys([...expandedRowKeys, newRowKey]);
};

3. 绑定Table的展开控制属性

给Table组件配置expandedRowKeys和onExpand属性,实现受控的展开/折叠逻辑:

<Table
  dataSource={dataSource}
  columns={columns}
  expandedRowKeys={expandedRowKeys}
  onExpand={(expanded, record) => {
    let updatedKeys = [...expandedRowKeys];
    if (expanded) {
      updatedKeys.push(record.key);
    } else {
      updatedKeys = updatedKeys.filter(key => key !== record.key);
    }
    setExpandedRowKeys(updatedKeys);
  }}
  expandedRowRender={(record) => (
    // 自定义展开面板内容,比如子表单或详情信息
    <div>
      <p>展开内容:{record.name}的详情</p>
    </div>
  )}
/>

关键注意点

  • 新行的key必须唯一,否则会导致展开状态混乱;
  • expandedRowKeys是受控属性,必须通过状态维护才能实现自动展开;
  • 若需要保留原有行的展开状态,添加新行时需追加而非覆盖expandedRowKeys数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:01:04