记录自己在解决这个需求中碰到的问题,首先在这里感谢Deidei☀️在这个过程中提供的帮助。Deidei☀️关于react项目中解决antd Table展开行可全部展开或关闭文章见 antd Table 展开行可全部展开或关闭
需求如图,在表头添加一个按钮,控制子表全部展开或关闭。
先看看antd Table官方文档对展开行的处理 antd表格 Table可展开
官方文档中对于表格展开行并没有一件全部展开或关闭,我在这里采用了Deidei☀️的解决方法:写一个表头按钮的样式放到同级的div中,再绝对定位到表格里。
初始化
constructor(props){
super(props)
this.state = {
expKeys: [], // 初始化expKeys
}
}
表头按钮样式
// 同级的div绝对定位,在上一级div中相对定位
<div style={
{
position: 'absolute', left: 30, top: 8, zIndex: 1 }}>
<div
onClick={
() => this.openOrCloseAll(true, adata)} // openOrCloseAll点击表头按钮事件
style={
{
display: this.state.expKeys.length ? 'inline-block' : 'none' }}
className="ant-table-row-expand-icon ant-table-row-expanded"
/>
<div
onClick={
() => this.openOrCloseAll(false, adata)}
style={
{
display: this.state.expKeys.length ? 'none' : 'inline-block' }}
className="ant-table-row-expand-icon ant-table-row-collapsed"
/>
</div>
点击表头按钮事件
openOrCloseAll = (type, adata) => {
this.setState({
expKeys: type ? [] : adata && adata.map(i => i.id)
})
};
父表中Table的属性
<Table
dataSource={
adata}
size="small"
// 可控的展开与关闭数组
expandedRowKeys={
this.state.expKeys}
// 单个展开或关闭,操作数组
onExpand={
(b, r) => {
const {
expKeys } = this.state;
const newExp = b ? [...expKeys, r.id] <