Table - Ant Design - 在 Virtual table ant design 中实现过滤器

Posted

技术标签:

【中文标题】Table - Ant Design - 在 Virtual table ant design 中实现过滤器【英文标题】:Table - Ant Design - Implement filter in Virtual table ant desgin 【发布时间】:2020-12-04 22:24:58 【问题描述】:

在 ant 设计的虚拟表中实现过滤器时遇到了一些麻烦。 当我在列配置上应用过滤器但不起作用时。

有没有人可以解决这个问题?

感谢您阅读本文。

【问题讨论】:

【参考方案1】:

是的……

经过 5 个小时的研究,我编写了一些代码来应用它。但我对速度和性能并不满意。

关于虚拟表ant表的代码,请参见:Virtual table - Ant design

//ES6 

import React from 'react';
import _ from 'lodash';
import VirtualTable from './virtualTable';

function compareData(filters, record) 
    return new Promise((resolve, reject) => 
        let compared_result = true;
        (async () => 
            await _.each(filters, (valueFilter, keyFilter) => 
                if(valueFilter !== null && valueFilter.length !== 0) 
                    if(compared_result == true) 
                        if(_.indexOf(valueFilter, record[keyFilter]) == -1) 
                            compared_result = false
                        
                    
                
            )

            if(compared_result == true) 
                resolve(record);
            
            else 
                resolve(undefined)
            
        )();
    );


class MoreDataTable extends React.Component 
    state = 
        dataSource: [],
        dataRaw:[]
    

    constructor(props) 
        super(props);
    
        this.state.dataSource = props.dataSource;
        this.state.dataRaw = props.dataSource;
    

    handleEventChangeTableData = (pagination, filters, sorter, extra) => 
        let dataResult = [...this.state.dataRaw];
        //adding something like sorter, pagination if you want

        (async () => 
            if(_.size(filters) > 0) 

                const result = await _.map(dataResult, record => 
                    return compareData(filters, record);
                )
            
                Promise.all(result).then(value => 
                    this.setState( dataSource: _.without(value, undefined));
                )
            
        )()
    

    render() 
        const props = 
            ...this.props,
            dataSource: this.state.dataSource
        
        return (
            <VirtualTable ...props onChange=(pagination, filters, sorter, extra) => this.handleEventChangeTableData(pagination, filters, sorter, extra) />
        )
    

export default MoreDataTable;

使用组件MoreDataTable

<MoreDataTable 
dataSource=this.state.dataReport 
columns=columns
loading=true />

【讨论】:

以上是关于Table - Ant Design - 在 Virtual table ant design 中实现过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Ant Design Table表格居中写法

ant-design-vue table表格合计行的实现

ant design table学习--引入第一个table组件

React开发(274):ant design table额外展开行

ant design table行高怎么设置?

ant.design.vue中table组件中的排序