首页 > 编程知识 正文

antd多维度表格,layui表格合并单元格

时间:2023-05-04 20:50:44 阅读:170713 作者:3827

我相信很多朋友在使用antd嵌套表时遇到了这个问题。 本人也很理解,很担心,经过和百度的争执,终于找到了问题的原因。

首先,antd的表数据源dataSource接收数组。 如果我们的子表每次收到都是单独的新数组,则每个展开只渲染一个数组,因此所有子表都相同

那么,保存每次请求的子表数据。 在此,将对象键值对进行保存

因为没有后台数据,所以我们在这里模拟了数据

const ChildrenDataOne=[

{ name:'XiaoHua1',age: 15,address: 'ZhengZhou ',key: 0},

{ name:'XiaoHua2',age: 15,address: 'ZhengZhou ',key: 1},

{ name:'XiaoHua3',age: 15,address: 'ZhengZhou ',key: 2},

]const ChildrenDataTwo=[

{ name:'XiaoBai1',age: 15,address: 'ZhengZhou ',key: 0},

{ name:'XiaoBai2',age: 15,address: 'ZhengZhou ',key: 1},

{ name:'XiaoBai3',age: 15,address: 'ZhengZhou ',key: 2},

]const ChildrenDataThree=[

{ name:'XiaoHei1',age: 15,address: 'ZhengZhou ',key: 0},

{ name:'XiaoHei2',age: 15,address: 'ZhengZhou ',key: 1},

{ name:'XiaoHei3',age: 15,address: 'ZhengZhou ',key: 2},

]const ChildrenDataFour=[

{ name:'XiaoLan1',age: 15,address: 'ZhengZhou ',key: 0},

{ name:'XiaoLan2',age: 15,address: 'ZhengZhou ',key: 1},

{ name:'XiaoLan3',age: 15,address: 'ZhengZhou ',key: 2},

]

该方法在每次单击展开按钮时将对应的数据存储在名为data的对象中,大致具有{ 1: [数据]、3: [数据]、2: [数据] }的效果

1constopenclick=(status,item )/status )子表处于展开状态(item )当前项目) 2 if (! 状态(return )返回

() /子表被存储的情况下,判断为直接结束当前的函数,不存储请求

4if(item.cid==1)5setdata ) . data, [ item.cid ] : children dataone } )6) 7if ) item.cid==2)8[ item.cid ] : childrendatatwo } (9) 10if ) item [ item.cid ] 3360 childrendatathree } (12 ) 13if ) item.cid==4) 14setdata )…data,[item.cid]3360childata

现在,我们有所有展开的数据,但它们都存储在对象中,因此每次与存储在对象中的数据匹配时都需要唯一的值(id )

此方法用于呈现子表,第一个参数是展开的所有相应数据,可以从这些数据中获取唯一的值(id )

可能有伴侣怀疑为什么要从这里拿走。 因为第一个参数输出的是(所有展开的数据)。 这意味着您可以获得所有展开的id,并放入相应的数据

我也踩过洞。 我每次展开都存了id。 而且,虽然有每个展开的数据,但是如果没有每个展开的id,所有的数据都会变成相同的。

const expandedRowRender=(item )={return (

columns={ChildrenColumns}

pagination={false}

dataSource={data[item.Cid]}/)

}

这里是所有的代码。 这个没有使用redux和dva。 我只是用state在页面上模拟了一下,想法是正确的。 伙伴们在理解了想法之后,移动到redux/dva中就可以了

import React,{ use state } from ' react ' import { table } from ' antd ' import

部件数据、

ParentColumns

ChildrenColumns,

ChildrenDataOne,

ChildrenDataTwo,

ChildrenDataThree,

ChildrenDataFour,

} from './sourse ' import './styles.less ' exportdefaultfunctionapp ({ const [ data,setdata]=usestate(null ) } )

//子表

columns={ChildrenColumns}

pagination={false}

dataSource={data[item.Cid]}/)

}constopenclick=(Status,item )={if (! 状态(return )返回

if(item.cid===1) {

setdata(.data,[item.Cid]: ChildrenDataOne } ) )

(if ) item.cid===2) {

setdata(.data,[item.Cid]: ChildrenDataTwo } ) )

(if ) item.cid===3) {

setdata(.data,[ item.cid ] : childrendatathree ) )

(if ) item.cid===4) {

setdata(.data,[ item.cid ] : childrendatafour ) )

}

}return (

//父表

class name=' components-table-demo-nested ' columns={ parent columns }

expandable={ { expandedrowrender }//渲染子表回调

数据源={ parent data }

onExpand={openClick} //部署时触发的回调/

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。