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

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

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

感谢您阅读本文。

【问题讨论】:

    标签: reactjs antd


    【解决方案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} />
    

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 2019-03-16
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2022-07-07
      • 2019-10-11
      • 2021-08-18
      • 2020-02-10
      相关资源
      最近更新 更多