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 ...
随机推荐
- ONNXRuntime学习笔记(一)
一. DL模型落地步骤 一般情况下,一个DL任务落地的流程一般包含训练和部署两大部分,具体细分我认为可以分为以下几个步骤: 1. 明确任务目标:首先要明确我们最终要达到一个什么样的效果,假设我们的DL ...
- springcloud + nacos实现共用基础服务(灰度版本)
背景: 当我们使用微服务时,若想在本地联调就需要启动多个服务,为了避免本地启动过多服务,现将注册中心等基础服务共用.当我们在服务A开发时,都是注册到同一个nacos,这样本地和开发环境的服务A就会同时 ...
- 对象、Map、Set、WeakMap、WeakSet
对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...
- 4.0 vue绑定dom属性和函数的方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CF 1015F
题意:[CF 1015F](https://codeforces.com/contest/1015/problem/F) 给你一个模式串A(一个不一定合法的括号序列),让你构造长度为2*n的合法括号序 ...
- String 为什么不可变?
转载来源:String为什么不可变 今天来分享一道群友去阿里云面试遇到的 Java 基础面试真题:"String.StringBuffer.StringBuilder 的区别?String ...
- 自动装箱与自动拆箱——JavaSE基础
自动装箱与自动拆箱 自动装箱与拆箱就是编译器蜜糖(Compiler Sugar) Integer a = 234; // 自动装箱,实际上是Integer a = Integer.valueOF(23 ...
- Java - 四种引用类型及应用场景
1. 强引用 new 一个对象的时候,就是强引用 Object object = new Object(); 只要强引用存在,垃圾回收就不会回收该对象,内存不足时会抛出OOM. 2. 软引用 定义:非 ...
- SpringCloud 配置管理:Nacos
目录 统一配置管理 配置热更新 配置共享 多环境配置共享 多服务配置共享 统一配置管理 将配置交给 Nacos 管理的步骤: 在 Nacos 中添加配置文件. 在微服务中引入 nacos 的 conf ...
- Tomcat部署接口环境遇到的问题,有没有人能帮忙解决指导一下
1.在虚拟机中用Tomcat部署一个接口环境:linux+jdk+Tomcat 前提条件:代码包啥的别人都用过,可以部署成功 2.具体部署: a. 利用xftp把所有的代码包war包传送到tomcat ...