Ant Design [Table] 如何通过点击列来展开行

Antd Design [Table] how to expand row by click in the column

我有一个可扩展的 table,其中最后一个操作列用于提交或查看详细信息(展开更多信息)

不知道如何在 column.render() 中创建扩展函数, 目前,我使用 expandRowByClick: true.

<Table
  expandable={{
    expandedRowRender,
    rowExpandable: (record) => record.key % 2,
    // expandIconColumnIndex:7
    expandRowByClick: true,
    expandIcon: () => <div />
    }}
  dataSource={data}
/>

但这不是答案,因为有些列使用 link 呈现,其他 onClick 回调,或者文本 More detail 应该由展开状态更改(More/Less).

antd设计版本4.16.0

Codesandbox:https://codesandbox.io/s/antdnestedtables-zrtuw

行在行点击时展开的原因是 expandRowByClick: true。去掉它。 现在,如果您想在自定义按钮上呈现可隐藏的行,则需要在 Table 组件上手动设置 expandedRowKeys 属性。您可以在此处阅读更多 AntD 文档:https://ant.design/components/table/#API

现在你的情况很简单。

第一。创建一个地方来存储你的扩展密钥,这必须通过使用这样的状态来完成 const [expended, setExpended] = useState()

第二。创建一个在单击时添加和删除扩展密钥的方法。注意它必须同时执行,因为当您单击 expend 按钮时,它会将相同的 index 发送到相同的方法。所以你必须检查它是否已经被选中。

const expend = (index) => {
    if (expended === index) setExpended(undefined);
    else setExpended(index);
};

这里是一次只能展开1个的例子。如果再扩大 - 其他人将关闭,而那个人将开放。如果您希望允许用户一次展开多个 - 需要重做此操作以改为使用数组。

使用 onClick={() => expend(index)} 将这个新创建的方法传递给您的 a 元素。注意只有当它是 More details 按钮时才这样做。

第三。像这样 table 渲染它

<Table
  className="components-table-demo-nested"
  columns={columns}
  expandable={{
    expandedRowRender,
    rowExpandable: (record) => record.key % 2,
    expandIcon: () => <></>
  }}
  expandedRowKeys={[expended]}
  dataSource={data}
/>

expandedRowRender 与您的情况相同。 expandIcon 设置为一个空片段,它很重要,因为没有它,它将在左侧呈现默认的 AntD 图标。 expandedRowKeys 是扩展行的键。它必须是一个数组,因此为什么 expended[] 中,因为如前所述,这个例子当时只能扩展 1 行。

结果:它只会在您单击 Actions 列中的自定义 More Details 按钮时展开。此外,如果行被扩展,而不是 More details 它会说 Close details

这是一个活生生的例子:https://codesandbox.io/s/antdnestedtables-forked-orq20?file=/index.tsx