antd表格组件嵌套表格 expandedRowRender 为什么出现多余空白列?

本文介绍了一种使用 React 实现的表格嵌套展示方法,通过在父级表格中嵌入子表格来显示层级数据。该方法利用了 Table 组件的 expandedRowRender 和 onExpand 属性,实现了子表格的动态加载与展开折叠效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码是这么写的

	expandedRowRender = (record, index) => {
        let children = JSON.parse(JSON.stringify(record.children));
        return <Table columns={this.state.columns2} dataSource={children} pagination={false}/>;
        
    };
    onExpand =(expanded, record)=>{
        console.log(expanded, record);
        let index = '';
        let sorts = this.state.sorts;
        for (let i = 0; i < sorts.length; i++) {
            if(sorts[i].mtId == record.mtId){
                index = i
            }
        }
        if (expanded === false) {
            console.log("合并!");
            if(index!==''){
                sorts[index].children = [];
                 // 表格数据
                this.setState({
                    sorts
                });
            }
        } else {
            this.setState({ loading: true })
            // 查询参数
            let obj = {
                mId : this.state.meetIngData.mId,
                mfType : 1,
                mtId:record.mtId,
                page : 1,
                rows : 10000,
            }
            postfn('/meeting/qryPgMeetingFileAndFileType', obj).then(res => {
                this.setState({ loading: false })
                if (res.data.resCode === '1') {
                    res.data.rows.forEach((item,index)=>{
                        item.key  = index;
                    });
                    if(index!==''){
                        sorts[index].children = res.data.rows;
                         // 表格数据
                        this.setState({
                            sorts
                        });
                    }
                    console.log('files',res.data.rows);
                } else {
                    message.error(res.data.resMsg)
                }
            }).catch((err) => {
                message.warn('网络错误,请重试')
                console.log('err',err);
                this.setState({ loading: false })
            })
        }
    }
    render() {
        let { columns,sorts} = this.state;
        return (
            <div> 
                <div className="">
                <Table
                    className="components-table-demo-nested"
                    expandedRowRender={this.expandedRowRender}
                    onExpand={this.onExpand}
                    columns={columns}
                    dataSource={sorts}
                />
                </div>
            </div>
        );
    }

渲染的结果是
在这里插入图片描述
展开后
在这里插入图片描述
多余的列

TypeScript、Ant Design(简称AntD)和ProTable是一组常用于前端开发的强大工具。AntD是一个流行的UI组件库,提供了一套丰富的React组件,而ProTable是基于AntD的一个表格组件,它扩展了基础表格的功能,使其更适用于复杂数据展示。 当你想要在TypeScript项目中嵌套使用AntD的ProTable组件时,首先需要安装`antd ProTable`依赖: ```bash npm install @ant-design/pro-table @types/react-pro-table ``` 然后,你可以创建一个嵌套表格的例子,比如有一个数据结构包含层级关系的数据,你可以这样做: ```typescript import { Table, Column } from '@ant-design/pro-table'; interface NestedData { id: string; name: string; children?: NestedData[]; } const columns: ProColumns<NestedData>[] = [ { title: 'Name', dataIndex: 'name', render: (text) => <a href="javascript:;">{text}</a>, }, { title: 'Children', dataIndex: 'children', render: (children: NestedData[]) => ( <Table columns={columns} data={children} bordered /> ), // 使用自定义渲染处理嵌套表格 customRender: 'children', }, ]; function NestableTable({ data }: { data: NestedData[] }) { return ( <Table columns={columns} data={data} pagination={{ pageSize: 5 }} /> ); } // 示例数据 const nestedData: NestedData[] = [ { id: '1', name: 'Parent 1', children: [ { id: '1-1', name: 'Child 1', }, { id: '1-2', name: 'Child 2', children: [{ id: '1-2-1', name: 'Grandchild 1' }], }, ], }, // 更多数据... ]; ReactDOM.render(<NestableTable data={nestedData} />, mountNode); ``` 在这个例子中,`customRender`属性用于指定如何处理`children`,使得每一行会显示一个嵌套表格
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值