创建项目

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. 技术分享 | Web自动化之Selenium安装

    Web 应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作.但是手工执行的任务容易出现人为的错误,也比较费时间.因此,将这些任务自动化,就可以消除人为因素.S ...

  2. python学习-Day29

    目录 今日内容详细 反射实际案例 面向对象的双下方法 __ str __ __ del __ __ getattr __ __ setattr __ __ call __ __ enter __ __ ...

  3. 如何对用户的绑定的身份证真实性进行实名认证(java)

    现在随着对用户实名制的要求,因此用户提交的身份证信息经查需要检查是否为真实信息,我们需要对用户提交的身份证信息进行核验,具体操作步骤如下: 第一步 到认证平台注册账号:云亿互通--实名认证服务 (yu ...

  4. ansible的roles使用

    1.创建roles文件夹 mkdir roles 2.在roles文件夹里面创建文件夹 cd roles/ mkdir {nginx,uwsgi,redis,mysql} 3.cd nginx 4.m ...

  5. mysql5.7介绍和安装

    环境准备: 1.关闭防火墙和selinux systemctl stop firewalldsystemctl stop SElinux 2. 如果安装过mariadb需要停止且卸载服务 system ...

  6. redis & redis sentinel

    Redis 命令参考 Redis Sentinel Cheat Sheet Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件) Redis哨兵模式(sentinel)学习总结及部署 ...

  7. CentOS配置epel源

    https://opsx.alibaba.com/mirror epel 配置方法 1.备份(如有配置其他epel源) mv /etc/yum.repos.d/epel.repo /etc/yum.r ...

  8. 一文看懂 ZooKeeper ,面试再也不用背八股(文末送PDF)

    ZooKeeper知识点总结 一.ZooKeeper 的工作机制 二.ZooKeeper 中的 ZAB 协议 三.数据模型与监听器 四.ZooKeeper 的选举机制和流程 本文将以如下内容为主线讲解 ...

  9. PKUSC2022 游记

    PKUSC2022 游记 Day1 上午随便看了点题,感觉没看什么题就开考了. 开考之后先看 T1,发现 T1 好像不是那么简单. T1 : 九条可怜有两个账号,她每次都会打 \(\rm rating ...

  10. python面向对象(封装、多态、反射)

    目录 面向对象之封装 @property 面向对象之多态 面向对象之反射 面向对象之封装 含义 将类中的某些名字按照特殊的书写方式"隐藏"起来,不让外界直接调用,目的是为了不然外界 ...