基于ScrollView的下拉刷新

news/2024/6/14 23:17:30 标签: react native, react.js

基于ScrollView的下拉刷新

    • 组件
    • 使用

组件

import React, {useState} from 'react';
import {ScrollView, RefreshControl, Platform} from 'react-native';

const RefreshComponent = ({children, onRefresh, onScroll}) => {
  const [refreshing, setRefreshing] = useState(false);
  const [iosDis, setIosDis] = useState(0);
  const pullDistanceThreshold = 150; // 下拉距离阈值

  const handleScroll = event => {
    const offsetY = event.nativeEvent.contentOffset.y;
    if (offsetY < -pullDistanceThreshold) {
      setIosDis(100);
    }
    onScroll && onScroll(offsetY);
  };

  const handleMomentumScrollEnd = event => {
    const {contentOffset} = event.nativeEvent;
    const isScrolling = contentOffset.y < 0;
    if (!isScrolling && iosDis >= 100) {
      setIosDis(0);
      onRefresh && onRefresh();
    }
  };

  const handleRefresh = () => {
    const systemType = Platform.OS;
    setRefreshing(true);
    setTimeout(() => {
      setRefreshing(false);
      // 模拟异步操作,例如发送网络请求
      if (systemType !== 'ios') {
        onRefresh && onRefresh();
      }
    }, 1500);
  };
  return (
    <ScrollView
      style={{flex: 1}}
      contentContainerStyle={{flexGrow: 1}}
      refreshControl={
        <RefreshControl refreshing={refreshing} onRefresh={handleRefresh} />
      }
      onScroll={handleScroll}
      onMomentumScrollEnd={handleMomentumScrollEnd}
      scrollEventThrottle={16}>
      {children}
    </ScrollView>
  );
};
export default RefreshComponent;

使用

1.引入组件
import RefreshComponent from '../../componets/RefreshComponent';

2.使用
<RefreshComponent onRefresh={} onScroll={}>
渲染内容
</RefreshComponent>

http://www.niftyadmin.cn/n/4941166.html

相关文章

linux系统部署jenkins详细教程

一、Linux环境 1、下载war包 官网下载地址&#xff1a; https://get.jenkins.io/war-stable/2.332.4/jenkins.war 2、将war包上传至服务器 创建目录/home/ubuntu/jenkins 上传war包至该目录 3、将jenkins添加到环境变量 进入环境变量文件 vim /etc/profile # 文件下方追加…

Android Shape 的使用

目录 什么是Shape? shape属性 子标签属性 corners &#xff08;圆角&#xff09; solid &#xff08;填充色&#xff09; gradient &#xff08;渐变&#xff09; stroke &#xff08;描边&#xff09; padding &#xff08;内边距&#xff09; size &#xff08;大小…

嵌入式面试笔试刷题(day8)

文章目录 前言一、uart spi ii2的区别二、造成TCP粘包原因和解决方法1.原因2.解决方法 三、什么是内存泄漏四、大量频繁的申请堆空间会发生什么五、SPI有几根线&#xff0c;可以去除哪根线六、C语言中的static和C中的static的区别七、回调函数概念八、怎么设置程序的可执行权限…

MAC 命令行启动tomcat的详细介绍

MAC 命令行启动tomcat MAC 命令行启动tomcat的详细介绍 一、修改授权 进入tomcat的bin目录,修改授权 1 2 3 ➜ bin pwd /Users/yp/Documents/workspace/apache-tomcat-7.0.68/bin ➜ bin sudo chmod 755 *.sh sudo为系统超级管理员权限.chmod 改变一个或多个文件的存取模…

STM32CubeMx驱动SG90(360度)

SG90 360度是一直转 而不是给定角度转的 pwm周期必须为20ms 0.5ms占空比 反转速度最大 1.5ms 不转 2.5ms正转速度最大

jquery如何修改选中状态

jquery修改选中状态的方法&#xff1a;1、使用addClass和removeClass方法&#xff0c;可以向选中的元素添加一个多个类名&#xff0c;从而改变其样式或状态&#xff1b;2、使用toggleClass方法&#xff0c;可以在选中元素上添加或移除一个类名&#xff0c;如果该类名已经存在&a…

自动驾驶港口车辆故障及事故处理机制

1、传感器故障&#xff1a; &#xff08;1&#xff09;单一传感器数据异常处理。自动驾驶电动平板传感方案为冗余设置&#xff0c;有其他传感器能够覆盖故障传感器观测区域&#xff0c;感知/定位模块将数据异常情况发给到规划决策模块&#xff0c;由“大脑”向中控平台上报故障…

关于iptables学习相关的问题以及案例

目录 iptables 第一部分 1. 什么是iptables&#xff1f; 2. iptables的作用是什么&#xff1f; 3. iptables和firewalld有什么区别&#xff1f; 4. 如何查看系统中已定义的iptables规则&#xff1f; 5. 如何添加一个新的iptables规则&#xff1f; 6. 如何删除一…