前端

antd Table 上拉加载更多数据

2019-11-07  本文已影响0人  KK_boy

背景

table不分页 然而数据又很多,所以数据需要做分页加载

查找antd 没找到上下拉加载对应的API

故自己实现

原来的实现方式:
在table外加一层div 监听table与div的位置变化来控制数据加载
但这样实现会在table滑动的时候 表头页滑上去了

下面为优化后的实现:

代码

import React, { Component } from "react";
import { Table } from "antd";

let lastScrollTop = 0;
class KKTable extends Component {
  constructor(props) {
    super(props);
    this.state = {};
  }

  componentDidMount() {
    const count = document.getElementsByClassName('ant-table-body').length
    for (let index = 0; index < count; index++) {
      // 给当前页面内的每个table添加滑动监听事件
      document.getElementsByClassName('ant-table-body')[index].addEventListener('scroll', this.onScrollEvent);
    }
  }

  componentWillUnmount() { }

  onScrollEvent = e => {
    // console.log(e.path[6].className); //通过这个获取对应的table
    const loadHeight = 150;
    if (e.target.scrollTop + e.target.clientHeight > e.target.scrollHeight - loadHeight) {
      // 这里去做你的异步数据加载
      const pullDown = e.target.scrollTop - lastScrollTop > 0
      const { loadMore } = this.props;
      if (loadMore && pullDown) {
        loadMore(e.target.scrollTop, e.target.clientHeight, e.target.scrollHeight);
      }
    }
    lastScrollTop = e.target.scrollTop
  }

  render() {
    const { loadMore, ...config } = this.props;

    return (
      <div>
        <Table {...config} />
      </div>
    );
  }
}

export default KKTable;

调用

 <KKTable loadMore={this.loadMore} className={key} rowKey={record => record[rowKey]} id={key} dataSource={dataSource} columns={columns} pagination={pagination} scroll={{ y: scroll_y, x: info.scroll_x }} loading={loading} bordered small />

  loadMore = () => {
    console.log('上拉加载更多');
    const { childKey } = this.state;
    this.fetchData(childKey);
  }

支持同一页面内多个表格

以上为本人的开发笔记,如有问题或其他实现方式请留言交流。
谢谢!

上一篇下一篇

猜你喜欢

热点阅读