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 ...
随机推荐
- Linux获取本机公网IP,调整双节点主从服务的RPC调用逻辑
简单记录一次双节点的之间的服务调用叭 ~ 现有: 服务A的双节点A1.A2 服务B的双节点B1.B2 服务A 和服务B 通过 Netty 实现 RPC 通信,可能会导致比较玄学的问题.如图: 要做到 ...
- BootstrapBlazor实战 Menu 导航菜单使用(1)
实战BootstrapBlazorMenu 导航菜单的使用, 以及整合Freesql orm快速制作菜单项数据库后台维护页面 demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql ...
- python学习-Day8
目录 作业讲解 数据类型内置方法3 字典 ( dict ,可变类型) 类型转换 -- dict() 需要掌握的方法 按key取值(可存可取) 统计字典中键值对的个数(len) 成员运算 删除键值对 获 ...
- Nessus简单介绍与安装
1.Nessus简单介绍与安装 1.Nessus简介 Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Ne ...
- TCP 协议灵魂 12 问,巩固你的网路底层基础!
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一 ...
- Java操作Hadoop、Map、Reduce合成
原始数据: Map阶段 1.每次读一行数据, 2.拆分每行数据, 3.每个单词碰到一次写个1 <0, "hello tom"> <10, "hello ...
- visio 画泳道图
参考
- Centos7部署Redis集群
Redis简介 Redis(Remote Dictionary Server)是完全开源的.遵守BSD协议的.高性能的Key-Value数据库. Redis与其他Key-Value缓存产品有一下三个特 ...
- 运维:ITSM
IT服务管理(ITSM)是一套帮助企业对IT系统的规划.研发.实施和运营进行有效管理的方法,是一套方法论.ITSM起源于ITIL(IT Infrastructure Library,IT基础架构标准库 ...
- 905. Sort Array By Parity - LeetCode
Question 905. Sort Array By Parity Solution 题目大意:数组排序,偶数放前,奇数在后,偶数的数之间不用管顺序,奇数的数之间也不用管顺序 思路:建两个list, ...