创建项目

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

  isPullUp:是否开启下拉刷新
  itemHeight:为每行的高度
  isPullTo: 是否开启上拉加载
 
VirtualizedList 组件的参数说明可以查看: https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md
 
在App 中使用后,效果如下

适配移动端操作可以查看:react配置postcss-pxtorem适配

react antd上拉加载与下拉刷新与虚拟列表使用的更多相关文章

  1. UITableView与UISearchController搜索及上拉加载,下拉刷新

    #import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableVi ...

  2. Vue-上拉加载与下拉刷新(mint-ui:loadmore)一个页面使用多个上拉加载后冲突问题

    所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTop ...

  3. vue.js移动端app实战4:上拉加载以及下拉刷新

    上拉加载以及下拉刷新都是移动端很常见的功能,在搜索或者一些分类列表页面常常会用到. 跟横向滚动一样,我们还是采用better-scroll这个库来实现.由于better已经更新了新的版本,之前是0.几 ...

  4. 移动端上拉加载,下拉刷新效果Demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. vue-scroller实现vue单页面的上拉加载和下拉刷新问题

    在vue中如何简单的实现页面的上拉加载和下拉刷新,在这里我推荐使用vue-scrolle插件. vue-scrolle的基本使用方法: 1.下载 npm i vue-scroller -D 2.导包 ...

  6. 使用mescroll实现上拉加载与下拉刷新

    现在上拉加载与下拉刷新几乎已经是移动端必备功能之一了,自己实现一个太麻烦,但是好用的插件又非常少.之前看到网上很多人都在用iScroll,于是也尝试用它做了几个DEMO,但或多或少都有一些问题,比如这 ...

  7. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  8. 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题

    前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...

  9. vue使用vant-ui实现上拉加载、下拉刷新和返回顶部

    vue使用vant-ui实现上拉加载.下拉刷新和返回顶部 vue现在在移动端常用的ui库有vant-ui和mint-ui,上拉加载.下拉刷新和返回顶部也是移动端最基础最常见的功能.下面就用vant-u ...

随机推荐

  1. ONNXRuntime学习笔记(一)

    一. DL模型落地步骤 一般情况下,一个DL任务落地的流程一般包含训练和部署两大部分,具体细分我认为可以分为以下几个步骤: 1. 明确任务目标:首先要明确我们最终要达到一个什么样的效果,假设我们的DL ...

  2. springcloud + nacos实现共用基础服务(灰度版本)

    背景: 当我们使用微服务时,若想在本地联调就需要启动多个服务,为了避免本地启动过多服务,现将注册中心等基础服务共用.当我们在服务A开发时,都是注册到同一个nacos,这样本地和开发环境的服务A就会同时 ...

  3. 对象、Map、Set、WeakMap、WeakSet

    对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...

  4. 4.0 vue绑定dom属性和函数的方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. CF 1015F

    题意:[CF 1015F](https://codeforces.com/contest/1015/problem/F) 给你一个模式串A(一个不一定合法的括号序列),让你构造长度为2*n的合法括号序 ...

  6. String 为什么不可变?

    转载来源:String为什么不可变 今天来分享一道群友去阿里云面试遇到的 Java 基础面试真题:"String.StringBuffer.StringBuilder 的区别?String ...

  7. 自动装箱与自动拆箱——JavaSE基础

    自动装箱与自动拆箱 自动装箱与拆箱就是编译器蜜糖(Compiler Sugar) Integer a = 234; // 自动装箱,实际上是Integer a = Integer.valueOF(23 ...

  8. Java - 四种引用类型及应用场景

    1. 强引用 new 一个对象的时候,就是强引用 Object object = new Object(); 只要强引用存在,垃圾回收就不会回收该对象,内存不足时会抛出OOM. 2. 软引用 定义:非 ...

  9. SpringCloud 配置管理:Nacos

    目录 统一配置管理 配置热更新 配置共享 多环境配置共享 多服务配置共享 统一配置管理 将配置交给 Nacos 管理的步骤: 在 Nacos 中添加配置文件. 在微服务中引入 nacos 的 conf ...

  10. Tomcat部署接口环境遇到的问题,有没有人能帮忙解决指导一下

    1.在虚拟机中用Tomcat部署一个接口环境:linux+jdk+Tomcat 前提条件:代码包啥的别人都用过,可以部署成功 2.具体部署: a. 利用xftp把所有的代码包war包传送到tomcat ...