react+antd+table实现表格数据,从头到尾循环、自动分页、滚动展示

2023-10-26

// ts写法
// 分页是20,滚动过程中自动分页调接口返回数据

class Demo extends React.Component<ThemeColorState & UserState, State> {
  /** 定时器 */
  timer: any = null;
  /** 滚动的dom */
  scrollDom: any = null;
  state: State = {
    scrollTop: 0,
    pagination: {
      total: 0,
      current: 1,
      pageSize: 20,
      size: "small",
      pageSizeOptions: ["10", "15", "30", "45"],
      defaultCurrent: 1,
    },
    dataSource: {
      total: 0,
      totalArea: 0,
      rows: [],
    },
  };
};

componentDidMount(): void {
    this.loadDetailsApproval();
  }
  componentWillUnmount() {
    if (this.timer) {
      clearInterval(this.timer);
      cancelAnimationFrame(this.timer);
    }
  }
  /** 查询审批情况详情 */
  loadDetailsApproval = async () => {
    const { pagination, search, tbaleOrder, tableField, currentTFarmLandId } = this.state;
    const totalPage = Math.ceil(pagination.total / pagination.pageSize);
    if (pagination.current > totalPage && pagination.current !== 1) {
      return;
    }
    const data = await TLandsProvider.getITableData({
        pageNum: pagination.current, pageSize: pagination.pageSize, orderByColumn: tableField,
        isAsc: tbaleOrder, name: search, farmLandId: currentTFarmLandId,
      }).catch(err => { message.error("审批情况获取失败!"); return null; });
    if (data && data.total > 0) {
      const rows = [...this.state.dataSource.rows, ...data.rows];
      const newRecords = rows.map((item: any, index: number) => ({
        ...item,
        key: index + 1,
      }));
      this.setState({
        dataSource: { ...data, rows: newRecords },
        pagination: { ...pagination, total: data.total },
      }, () => {
        if (pagination.current === 1) {
          this.timer = requestAnimationFrame(this.initialScroll);
        }
      });
    } else {
      if (this.timer) {
        cancelAnimationFrame(this.timer);
      }
    }
  }
  /** 分页变化触发事件 */
  paginationChange = (page: number) => {
    this.setState(
      {
        pagination: {
          ...this.state.pagination,
          current: page,
        },
      }, this.loadDetailsApproval,
    );
  }

  /** 滚动 */
  initialScroll = () => {
    const { pagination, scrollTop } = this.state;
    const { current } = this.state.pagination;
    const dom = document.getElementsByClassName("ant-table-body")[0];
    const totalPage = Math.ceil(pagination.total / pagination.pageSize);

    dom.scrollTop += 1;
    // console.log("dddddd", Math.floor(dom.scrollTop) + dom.clientHeight, dom.scrollHeight);
    // 在滚动到离底部10像素的地方,翻页加载
   
    if (Math.floor(dom.scrollTop) + dom.clientHeight >= dom.scrollHeight - 10 && Math.floor(dom.scrollTop) + dom.clientHeight <= dom.scrollHeight) {
      if (scrollTop === 0) {
        this.setState({
          scrollTop: dom.scrollTop,
        });
        if (pagination.current >= totalPage) {
          dom.scrollTop = 0;
          cancelAnimationFrame(this.timer);
          // this.paginationChange(1);
        } else {
          this.paginationChange(current + 1);
        }
      }
    } else {
      this.setState({
        scrollTop: 0,
      });
    }
    this.timer = requestAnimationFrame(this.initialScroll);
  }



render(){
         <div
           className="bottom-con"
           onMouseEnter={() => { if (this.timer) cancelAnimationFrame(this.timer); }}
           onMouseLeave={() => { if (this.timer) cancelAnimationFrame(this.timer); this.timer = requestAnimationFrame(this.initialScroll); }}
         >
              
           <Table
              columns={columns}
              dataSource={dataSource?.rows}
              pagination={false}
              scroll={{ y: "calc(100% - 50px)" }}
           />
              
         </div>
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react+antd+table实现表格数据,从头到尾循环、自动分页、滚动展示 的相关文章

  • 如何获取 AngularJS 指令中元素的 x 和 y 位置

    在指令的链接函数部分中 我们可以访问element目的 我想确定是否element对象位于当前视口内 如果可用 我目前有以下内容 link function scope element attrs controller var page a
  • JS专用鼠标按键

    我的鼠标侧面有两个按钮 其默认行为是 后退 和 前进 我想知道的是是否可以在 JavaScript 中检测这些鼠标按钮的点击 或者这些按钮是否是类似于键盘的 播放 音量调高 和 无线开 关 的 特殊 按钮纽扣 我不知道任何特定的鼠标事件 但
  • 构建基于纯 JavaScript 的 Web 应用程序(客户端和服务器端)是否有意义? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直认为 JavaScript 是任何 Web 应用程序客户端的一个很好的补充 或者更确切地说 在过去几年中 是一个必须具备的功能 即使当我开
  • IE 11 使用 HTML input=file 标签时锁定文件

    我在 IE11 中使用文件输入中的浏览来选择文件 我在资源管理器中使用shift delete删除了该文件 然后 当我刷新文件夹时 我删除的文件会再次出现在资源管理器中 无论如何 我可以通过客户端 JavaScript 释放文件句柄吗 我在
  • JS中的递归排序

    在一次采访中 我被要求编写一个程序 算法来使用递归对数字数组进行排序 虽然我含糊地回答了它 但我尝试并想出了以下代码 您可以使用以下JSFiddle https jsfiddle net RajeshDixit 2u9mLegv 1 链接来
  • 我在 firebase.auth.ApplicationVerifier 中遇到问题

    错误发生在signInWithPhoneNumber 的第二个参数中 我无法解决这个问题 我使用了三种方法来发送 otp 验证 otp 和最后用于验证码 methods sendOTP e e preventDefault if this
  • 转义双引号 JavaScript

    我试图在 iPhone 上查看时运行某种图像格式 在其他情况下运行一些 Flash 视频 var uagent navigator userAgent toLowerCase if uagent search iphone gt 1 doc
  • 是否可以告诉 jsdoc 在与源代码分开的文件中查找该代码的文档?

    我希望内联注释尽可能短 因为我的经验是超过 3 或 4 行的注释往往会被掩盖 从而产生很多不必要的 阅读手册行 遗留系统要求我遵守与 jsdoc 兼容的格式来记录代码 如果要正确记录许多不言而喻的事情 则需要明确声明它们 实际上每个标签都可
  • 我们如何调用react-navigation中的特定类型的action?

    如何使用 NavigationAction 调用操作 如果用户没有令牌 则会返回初始页面 我想重置 初始化 MainTabNavigator componentWillReceiveProps nextProps if nextProps
  • 计算链接上的点击次数(不带 onclick)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有诸如此类的链接 a href h
  • Javascript:如何简化具有多个 OR 条件的 if 语句?

    很抱歉 如果我在写这篇文章时犯了错误 我是新来的 不知道这是如何工作的 希望我能尽快学会 我也是 JavaScript 新手 所以问题是 我有这个代码 elements js文件 我无法让它工作 放这个有用吗 if codePrompt c
  • 如何观察Firebase存储上传事件

    我有一个将照片上传到 Firebase 存储的 iOS 应用程序 以及一个连接到同一个 Firebase 的 Web 应用程序 有没有办法从网络上观察存储的变化 当上传照片时 只有iOS设备本身可以访问UploadTask 并且我没有看到o
  • 如何为 HTML 验证提供自定义验证错误消息?

    当我使用默认 HTML 验证时 它会显示默认错误消息 这不是我想向客户显示的 我需要自定义消息并为每个验证提供不同的信息 例如最小 最大 类型和要求 例如 该字段为必填项 值不匹配 参考传统的HTML代码
  • TinyMCE 选择文本并使用 javascript 激活链接对话

    我正在尝试编写一个自动化 使用黄瓜 水豚 硒 测试 它将在tinymce框中选择一些文本 单击链接按钮 然后打开链接选择页面 但链接按钮仅在选择某些文本时才变为活动状态 所以第一轮 tinyMCE activeEditor selectio
  • jsx转js后dom未定义错误

    我创建了一个 jsx 文件 如下所示 jsx dom function use strict define jquery react react dom function React ReactDOM var AppView React c
  • 是否可以模拟 isTrusted=true

    我希望在调用 touchStart 事件时能够模拟 isTrusted true 是否有任何库或任何类型的解决方法可以实现这一点 以下是我以编程方式运行 touchStart 时的输出与实际调用 touchStart 时的输出 我正在使用移
  • 为什么 JavaScript 在不同浏览器中不一致?

    在花了无数个小时修复 JS 以使其跨浏览器兼容 主要是 IE 之后 我一直在思考以下问题 Why不是 JavaScript持续的跨浏览器 我的意思是 为什么 JS 不能像 Java 和 Flash 那样好呢 相反 我们必须求助于 jQuer
  • 如何以编程方式移动 OpenLayers Vector?

    API 文档为OpenLayers Feature Vector http dev openlayers org apidocs files OpenLayers Feature Vector js html说 Vector 本身根本没有方
  • 展平数组中的对象

    大家好 我从响应中获取了一系列对象 我需要将所有学生对象展平为简单的学生姓名 但不确定如何进行 任何帮助将不胜感激 数组示例 students id 123456 name Student Name active true students
  • Firebug 分析问题:“没有要分析的活动”

    我想用一些 javascript jQuery 尝试一些不同的选项 看看哪个是最快的 但是我无法让分析正常工作 这是我要测试的代码 this keypress function e console profile test retrieve

随机推荐

  • Figma怎么汉化?这个Figma 汉化插件早知道就好了!

    Figma官方目前没有中文版 可能与早期的封禁大疆事件和面向非洲地区扩张策略有关 但是可以使用第三方汉化插件来获得中文版本的Figma Figma cool是一个提供汉化插件的网站 支持多个平台 另外 还有一款名为即时设计的中文设计工具 提
  • java.lang.IllegalArgumentException 异常报错完美解决

    目录 修改JDK使用版本 修改开发工具idea配置 eclipse的直接跳过这个看下面 修改开发工具eclipse配置 学习spring依赖注入的时候碰到这个坑 折腾了许久 记录一下以防其他小伙伴入坑 该异常主要原因是因为JDK与Sprin
  • Lisp-Stat 翻译 —— 第四章 其它Lisp特性

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 第四章 其它Lisp特性 上一章介绍了Lisp编程的基础 在那章里重点展示了对编写Lisp函数有用的编程技术 为了最高效地使用这些技术 知道Lisp和Lisp Stat提供
  • 智能指针之shared_ptr初始化,引用计数,常用操作和自定义删除器等等03

    一 share ptr 1 share ptr基础 1 共享所有权 不是被一个shared ptr拥有 而是被多个shared ptr之间相互协作 shared有额外开销 2 工作原理 利用引用计数的方法管理一片内存 每增加一个shared
  • C++ 一些知识点

    https www nowcoder com profile 7838045 myFollowings detail 3445247 链接 https www nowcoder com questionTerminal 087006d1e4
  • Red Hat Linux 7.5的安装及修改密码【详细】

    一 如何安装Red Hat Linux 7 5 详细 1 打开安装好的VMware 点击主页上的 创建新的虚拟机 选择 自定义 后 点击 下一步 2 选择虚拟机硬盘兼容性 我们选择Wordstation 14 x 3 选择稍后安装操作系统
  • -bash: ./mysqld: 没有那个文件或目录解决方法

    MySQL问题 bash mysqld 没有那个文件或目录 mysql安装路径 usr local mysql bin vi etc profile 添加环境变量 export PATH PATH usr local mysql bin 重
  • 营销活动:提升小程序的用户活跃度的关键

    在现今竞争激烈的商业环境中 小程序已成为企业私域营销的重要工具之一 然而 拥有一个小程序并不足以保证用户的活跃度 营销活动作为推动用户参与的有效方式 对于提升小程序的用户活跃度起着至关重要的作用 本文将深入探讨营销活动在提升小程序用户活跃度
  • Swagger的用法

    Swagger的用法 1 yml配置文件中引入依赖
  • C++ 内存管理

    C 内存管理 关于析构函数 1 when the desconstructor will be called 具体地说如果出现以下几种情况 程序就会执行析构函数 如果在一个函数中定义了一个对象 它是自动局部对象 当这个函数被调用结束时 对象
  • 静态代码块

    在Java类中 使用static关键字修饰的代码块称为静态代码块 当类被加载的时候 静态代码块就会被执行 由于类只会加载一次 所以静态代码块只会执行一次 在程序当中 使用静态代码块对类的成员变量进行初始化 package qmfx2 pub
  • FastAPI 使用 WebSocket创建实时应用程序

    超文本传输协议 或 HTTP 是当今互联网上最常用的协议之一 它允许客户端获取资源 例如 HTML 页面和图像 客户端 通常是浏览器 向服务器请求资源 图像 CSS 文件等 服务器响应请求的数据 它是一个严格的单向协议 服务器只会在客户端请
  • conda install 和 pip install 在ubuntu上的区别

    conda install 和 pip install 在ubuntu上的区别 pip和conda 看了很多博主的解释 已经说的很清楚了 pip pip installs packages 和conda都是包管理系统 pip最常用于安装在p
  • Merkle树

    白皮书引入 Merkel树是一种数据结构 图1 1 比特币白皮书插图 生成一个Merkel树 图1 2 来自维基百科插图 分析 自下而上 我们有四个文件 比特币系统的话就是交易 这个数据结构可以用在各种方面 L1 L2 L3 L4 四个文件
  • QT学习-数据类型转换

    文章目录 前言 一 num转QString 二 数据输出格式 三 QString拆分到QStringList 1 去除空格拆分 2 按固定长度拆分 四 QStringList转QByteArray HEX 五 uint8 t与QByteAr
  • java关键字const_java 关键字详解

    一 关键字总览 访问控制 private protected public 类 方法和变量修饰符 abstract class extends final implements interface native new static str
  • 用JAVA语言写一个计算员工月工资的程序

    一 任务需求 某公司分为多个部门 每个部门有一个经理和多个员工 每个员工根据职称发基本工资 员工的工资由基本工资 日加班工资 日缺勤工资等组成 具体需求如下所示 员工的基本信息 包括部门 职务 职称以及工资记录等信息 能记录员工的每一个职称
  • 过压保护芯片,IC电路方案集合

    随着快充适配器 QC3 0充电器 PD充电器的诞生 改变了原先USB的5V充电 增加了9V 12V的充电电压 甚至PD充电器20V也是很常见了 9V 12V 20V高电压的应用产生 虽然说9V 12V 20V的高压输出 不会被误触发 但是消
  • R-FCN+ResNet-50用自己的数据集训练模型(python版本)

    说明 本文假设你已经做好数据集 格式和VOC2007一致 并且Linux系统已经配置好caffe所需环境 博客里教程很多 下面是训练的一些修改 py R FCN源码下载地址 https github com Orpine py R FCN
  • react+antd+table实现表格数据,从头到尾循环、自动分页、滚动展示

    ts写法 分页是20 滚动过程中自动分页调接口返回数据 class Demo extends React Component