当前位置: 首页 > news >正文

antd中Select大数据分页触底刷新处理优化

平时使用antd中Select的下拉一般就几十几百条,这时候直接使用组件模糊查询就能实现大部分业务场景需求。

今天遇到一个需要模糊查询并且总量上万条的下拉框,如果一次性怼上去上万条,会造成浏览器卡顿。所以这边采用后端分页,前端触底加载刷新的方式去优化这个模糊查询。

<SelectallowClear  //支持清除showSearch  //支持输入filterOption={false}   //这个参数false才能支持接口数据动态刷新style={{ width: '100%' }}onSearch={this.diagNameonSearch}  //输入onChange={this.diagNameChange}onPopupScroll={this.onPopupScroll}  //监听下拉事件placeholder={'请选择诊断'}getPopupContainer={triggerNode => (triggerNode.parentElement || document.body)} //防止页面滚动导致下拉框错位>{Array.isArray(diagNameList) && diagNameList.map((item: any) => {if (item.itemName) {return <Option value={item.itemName}>11{item.itemName}</Option>}})}</Select>
diagNameChange = (e: any, action: any) => { //选择事件this.updateState({ diagName: e, });console.log(action, 'action')if (action === undefined) {this.props.dispatch({type: 'admissionRecordCheck/pageGet',payload: {keyword: '',pageNum: 1,pageSize: 10,},})}
};
diagNameonSearch = (e: any) => { //输入事件clearTimeout(this.state.antiShake) //加入防抖  防止输入时反复调用接口this.setState({antiShake: setTimeout(() => {this.updateState({ //保存当前输入值  用于后续触底刷新keyword: e,})this.props.dispatch({type: 'admissionRecordCheck/pageGet',payload: {keyword: e,pageNum: 1,pageSize: 10,},})}, 1000)})
}
onPopupScroll = (e: any) => { //滚动事件 用于判断触底刷新const { pageGetpageNum, pageGetpageSize, diagNameList, keyword } = this.props.admissionRecordCheckconst { target } = e;const { scrollTop, scrollHeight, clientHeight } = target;if (scrollTop + clientHeight == scrollHeight) { //触底 触发分页查询接口!this.props.dispatch({type: 'admissionRecordCheck/pageGetScroll',payload: {keyword,pageNum: pageGetpageNum + 1,pageSize: 10,},}).then((res: any) => {if (res && res.resultCode == "000000") {let dataList = Array.isArray(res.data.dataList) ? res.data.dataList : []this.updateState({diagNameList: diagNameList.concat(dataList), //合并原数组pageGetpageNum: pageGetpageNum + 1,})} else {(res && res.resultMsg) ? message.warning(`${res.resultMsg}`) : message.error('请求错误!')}})}}

相关文章:

  • 虚拟纪念展馆建设的重大意义:重新定义纪念活动的未来
  • C++——探索智能指针的设计原理
  • 深入Ruby缓存:掌握Memcached的使用艺术
  • 【ARM系列】GIC600AE功能安全
  • modify filename
  • 【有为己之心方能克己】
  • 推广旅游卡项目,一个月创收十几万,为何说旅游卡项目堪称盈利利器?
  • Oracle JDK 与 OpenJDK:如何选择及其区别
  • Echarts-饼图
  • BASH and SH in SHELL scripts
  • 【办公软件使用分享—Excel篇】实用技巧 一学就会
  • 【面试题】网络IP协议(第六篇)
  • 数据库自动备份到gitee上,实现数据自动化备份
  • 微软Edge浏览器全解析
  • Unity 动画事件
  • php的引用
  • [PHP内核探索]PHP中的哈希表
  • Docker容器管理
  • ES6系列(二)变量的解构赋值
  • HTTP那些事
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript-Array类型
  • laravel5.5 视图共享数据
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Ruby 2.x 源代码分析:扩展 概述
  • SSH 免密登录
  • Theano - 导数
  • vue-cli在webpack的配置文件探究
  • 基于web的全景—— Pannellum小试
  • 聊聊flink的TableFactory
  • 区块链分支循环
  • 如何解决微信端直接跳WAP端
  • 实战|智能家居行业移动应用性能分析
  • 数组的操作
  • 为视图添加丝滑的水波纹
  • 智能合约Solidity教程-事件和日志(一)
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $NOIp2018$劝退记
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)Hive SQL编译成MapReduce任务的过程
  • (AngularJS)Angular 控制器之间通信初探
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (算法)Travel Information Center
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (循环依赖问题)学习spring的第九天
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)为什么要选择C++