您的位置:

使用Table.render优化页面列表展示

一、优点:

Table组件是Antd Design React UI库中非常强大的一个组件,它可以轻松地将数据渲染成表格,并且可以对表格进行排序、分页等操作。当需要渲染大量的数据时,React开发人员会使用分页功能去将数据分页展示,但是如果数据较多,分页展示将会使用户体验下降。此时就可以使用Table组件的render属性来优化页面展示效果,即将数据以虚拟表格的形式展示在页面中。当用户上下滑动虚拟表格时,只渲染可视区域内的数据,其他数据不会被渲染,大大提高了页面性能。

二、使用:

要使用Table.render优化页面列表展示,我们需要引入antd的Table组件和React-virtualized组件::

    import { Table } from 'antd';
    import { AutoSizer, Column } from 'react-virtualized';
    import 'react-virtualized/styles.css';

其中AutoSizer是一个包裹组件,会根据其子元素的高度和宽度来自动计算出表格应该占用的宽和高,而Column则是Table组件每一列的映射,可以在其内部定义列的宽度、对齐方式等。

接下来,我们需要修改Table组件。

    render() {
        const { data, columns, rowKey } = this.props;
        return (
            
                {({ width, height }) => (
                    
    (
                                    
    
{column.title}
)} cellRenderer={({ rowData }) =>
{column.render(rowData[column.dataIndex])}
} dataKey={column.dataIndex} /> ))}
{columns.map((column) => (
)}
); }

我们将Table组件的body和row属性改为了VirtualBody和VirtualRow,而VirtualBody是React-virtualized提供的包裹组件,它可以根据可视区域内的行数据来渲染表格行。

接下来,我们需要自定义VirtualRow和VirtualBody组件。VirtualRow组件用来渲染每一行数据,而VirtualBody组件则用于渲染表格中所有的数据。虚拟表格中只会渲染可视区域内的数据,所以我们需要根据scrollTop和scrollTop+clientHeight计算出数据的开始和结束位置,只渲染可视区域内的数据:

    const Row = ({ className, columns, index, key, style }) => (
        
  
{columns.map((column) => (
{column.render(data[index][column.dataIndex])}
))}
); const VirtualRow = ({ index, style, data }) => ( ); const VirtualBody = ({ className, style, columns, dataSource, onScroll }) => { const { scrollTop, clientHeight } = event.target; const startIndex = Math.floor(scrollTop / 35); const endIndex = Math.min(startIndex + Math.ceil(clientHeight / 35), dataSource.length); const tableData = { columns, startIndex, endIndex, }; return (
{tableData && tableData.columns && tableData.columns.length > 0 && dataSource.slice(startIndex, endIndex).map((item, index) => ( ))}
); };

我们来解析一下代码:

首先,我们定义了一个Row组件,用于将所有的行数据渲染成表格的一行;接着,我们定义了VirtualRow组件,它通过计算开始和结束位置来动态渲染每一行数据;最后,我们定义了VirtualBody组件,它通过计算可视区域内的数据,并调用VirtualRow组件来渲染出所有的行数据。

三、优化效果:

使用Table.render优化页面列表展示能够有效地提高页面性能,目前很多在线商城、社交平台、新闻网站都采用了该技术优化其列表展示效果。