react antd上拉加载与下拉刷新与虚拟列表使用
创建项目
create-react-app antdReact
安装:antd-mobile、react-virtualized
npm i antd-mobile -S
npm i react-virtualized -S
在component 中创建一个scroll.jsx 文件,代码如下:
import './Scroll.less';
import { useEffect, useRef, useState } from 'react';
import { List, Image, InfiniteScroll, PullToRefresh } from 'antd-mobile'; // 使用antd 的上拉加载与下拉刷新组件 import { List as VirtualizedList, AutoSizer, WindowScroller } from 'react-virtualized';
const rem =
Math.floor(
((document.documentElement.clientHeight > document.documentElement.clientWidth
? document.documentElement.clientWidth / 10
: (document.documentElement.clientHeight / 10) * 0.7) *
100) /
37.5
) / 100; // 适配移动端,当前使用的 postcss-pxtorem 值为 37.5 const Scroll = (props) => {
const [rowHeight, setRowHeight] = useState(props.itemHeight * rem); // 每行的高度
const scrollElm = useRef(null); // 获取当前要滚动的元素
const [element, setElement] = useState(); // 赋值 WindowScroller 要滚动的元素 useEffect(() => {
setElement(scrollElm.current);
}, [scrollElm.current]); // 避免元素节点没有而滚动条有问题 return (
<div className="scroll-list" ref={scrollElm}> // 设置样式
<WindowScroller scrollElement={element}>
{({ height, scrollTop, isScrolling }) => {
return props.isPullUp ? (
<PullToRefresh onRefresh={props.onRefresh} headHeight={50} threshold={80}>
<List>
<AutoSizer disableHeight>
{({ width }) => (
<VirtualizedList
autoHeight
rowCount={props.dataLength}
rowRenderer={props.Row}
width={width}
height={height}
rowHeight={rowHeight}
overscanRowCount={5}
isScrolling={isScrolling}
scrollTop={scrollTop}
></VirtualizedList>
)}
</AutoSizer>
</List>
</PullToRefresh>
) : (
<List>
<AutoSizer disableHeight>
{({ width }) => (
<VirtualizedList
autoHeight
rowCount={props.dataLength}
rowRenderer={props.Row}
width={width}
height={height}
rowHeight={rowHeight}
overscanRowCount={5}
isScrolling={isScrolling}
scrollTop={scrollTop}
></VirtualizedList>
)}
</AutoSizer>
</List>
);
}}
</WindowScroller>
{props.isPullTo && (
<InfiniteScroll loadMore={props.onLoadMore} hasMore={props.isLoading} />
)}
</div>
);
}; Scroll.defaultProps = {
isLoading: false,
isPullUp: true,
itemHeight: 60,
onRefresh: undefined,
isPullTo: false,
onLoadMore: () => {},
}; export default Scroll;
defaultProps: 为当前组件的默认的 Props


适配移动端操作可以查看:react配置postcss-pxtorem适配
react antd上拉加载与下拉刷新与虚拟列表使用的更多相关文章
- UITableView与UISearchController搜索及上拉加载,下拉刷新
#import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableVi ...
- Vue-上拉加载与下拉刷新(mint-ui:loadmore)一个页面使用多个上拉加载后冲突问题
所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTop ...
- vue.js移动端app实战4:上拉加载以及下拉刷新
上拉加载以及下拉刷新都是移动端很常见的功能,在搜索或者一些分类列表页面常常会用到. 跟横向滚动一样,我们还是采用better-scroll这个库来实现.由于better已经更新了新的版本,之前是0.几 ...
- 移动端上拉加载,下拉刷新效果Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue-scroller实现vue单页面的上拉加载和下拉刷新问题
在vue中如何简单的实现页面的上拉加载和下拉刷新,在这里我推荐使用vue-scrolle插件. vue-scrolle的基本使用方法: 1.下载 npm i vue-scroller -D 2.导包 ...
- 使用mescroll实现上拉加载与下拉刷新
现在上拉加载与下拉刷新几乎已经是移动端必备功能之一了,自己实现一个太麻烦,但是好用的插件又非常少.之前看到网上很多人都在用iScroll,于是也尝试用它做了几个DEMO,但或多或少都有一些问题,比如这 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...
- vue使用vant-ui实现上拉加载、下拉刷新和返回顶部
vue使用vant-ui实现上拉加载.下拉刷新和返回顶部 vue现在在移动端常用的ui库有vant-ui和mint-ui,上拉加载.下拉刷新和返回顶部也是移动端最基础最常见的功能.下面就用vant-u ...
随机推荐
- GO 前后端分离开源后台管理系统 Gfast v2.0.4 版发布
更新内容:1.适配插件商城,开发环境从后台直接安装插件功能:2.代码生成细节修复及功能完善(支持生成上传文件.图片及富文本编辑器功能):3.增加swagger接口文档生成:4.更新goframe版本至 ...
- 使用 VS Code + Markdown 编写 PDF 文档
背景介绍 作为一个技术人员,基本都需要编写技术相关文档,而且大部分技术人员都应该掌握 markdown 这个技能,使用 markdown 来编写并生成 PDF 文档将会是一个不错的体验,以下就介绍下如 ...
- 爬取百度页面代码写入到文件+web请求过程解析
一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...
- python之生成器与模块
目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...
- 在linux上开启酸酸乳,未完待续
在服务器调试深度学习环境的时候总需要下载conda的包,一直以来都觉得是因为国内访问慢,于是想在服务器上开 ,或者ssr.由于过去用ssr多一些,于是想了解ssr on linux. 1.首先win1 ...
- C/C++ 单元自动化测试解决方案实践
vivo 互联网服务器团队 - Li Qingxin C/C++ 开发效率一直被业内开发人员诟病,单元测试开发效率也是如此,以至于开发人员不愿花时间来写单元测试.那么我们是不是可以通过改善编写单元测试 ...
- Machine Learning With Go 第4章:回归
4 回归 之前有转载过一篇文章:容量推荐引擎:基于吞吐量和利用率的预测缩放,里面用到了基本的线性回归来预测容器的资源利用情况.后面打算学一下相关的知识,译自:Machine Learning With ...
- vue跑马灯vue3-marquee
安装vue3-marquee 如果您使用的是 npm: npm install vue3-marquee@latest --save 如果您使用的是yarn: yarn add vue3-marque ...
- 《HALCON数字图像处理》第一、二章笔记
目录 第一章 绪论 1.1 图像和图像处理 1.1.1 图像 1.1.2 数字图像 1.1.3 图像处理及其发展过程 1.2 数字图像处理的步骤和方法 1.3 数字图像处理系统的硬件组成 1.4 数字 ...
- k8s中label和label selector的基本概念及使用方法
1.概述 在k8s中,有一个非常核心的概念,就是label(标签),以及对label的使用,label selector. 本文档中,我们就来看看:1.什么是标签,2.如何定义标签,3.什么是标签选择 ...