苹果系统H5下拉加载事件重复触发(react hooks)

文章目录

  • 问题描述
  • 解决思路
  • 引发的问题
  • 优化后的代码


问题描述

ios端手机下的h5/小程序,滚动到底部时加载更多数据,但是滚动到底部时重复触发加载事件,在安卓机下则不会发生该问题,记录一下解决方案。


解决思路

为了防止下拉事件重复触发,对下拉事件做一次防抖处理:

import { useState, useRef, useCallback } from 'react';
import debounce from 'lodash/debounce';const paramPageRef = useRef(1)
const [searchResult, setSearchResult] = useState([]);// 防抖查询const debounceSearch = useCallback(debounce(() => handleSearch (), 300),[],);// 接口查询数据const handleSearch = async () => {const params = {// 一些参数county: selectedArea.regionName,address: searchKey,...stableParams,currentPage: paramPageRef.current,};try {const res = await fuzzySearchByPage(params);console.log('addressSearch---response-->', res);if (res.currentPage === 1) {setSearchResult(res?.records || []);} else {     setSearchResult([...searchResult, ...res?.records]);}   setHasMore(res.hasMore )paramPageRef.current += 1} catch (err) {console.error('handleSearch----err--->', err);}};<ScrollRefreshdown={false}pull={false}Lower={() => {if (hasMore) {debounceSearch(data)}     ;}}/ >

引发的问题

以上代码解决了重复触发下拉到底的问题,但是使用useCallBack的防抖会形成闭包,导致在 handleSearch 方法中取不到最新的 searchResult, 从而加载更多时会少加载前一页的数据,为了防止这个闭包问题,可以通过设置一个新的state,,通过监听这个state触发handleSearch方法。

优化后的代码

import { useState, useRef, useCallback } from 'react';
import debounce from 'lodash/debounce';const paramPageRef = useRef(1)
const [searchResult, setSearchResult] = useState([]);
const [page, setPage] = useState(1);// 防抖查询const debounceSearch = useCallback(debounce(() => setPage(paramPageRef.current), 300),[],);useEffect(()=>{console.log(page)if (page !==1 ) {handleSearch()}},[page])// 接口查询数据const handleSearch = async () => {const params = {// 一些参数county: selectedArea.regionName,address: searchKey,...stableParams,currentPage: paramPageRef.current,};try {const res = await fuzzySearchByPage(params);console.log('addressSearch---response-->', res);if (res.currentPage === 1) {setSearchResult(res?.records || []);} else {     setSearchResult([...searchResult, ...res?.records]);}   setHasMore(res.hasMore )paramPageRef.current += 1} catch (err) {console.error('handleSearch----err--->', err);}};<ScrollRefreshdown={false}pull={false}Lower={() => {if (hasMore) {debounceSearch()}     ;}}/ >

如此便可以正常请求了,下拉事件在300毫秒内只会触发一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

22年上半年下午题

第一大题题目 第一大题解答 第一小问 看加工交互和说明来得出实体的名字。如果不太确定&#xff0c;可以多去看几条数据流来确认答案。仔细一点&#xff0c;这分稳啦。 第二小问 需要对应加工结合说明得出数据存储的名称。 一般可以在后面加上表字或者加上信息表。自拟&…

Docker绑定CPU

lscpu | grep "CPU(s):"多核CPU的服务器Docker还可以控制容器运行限定使用哪些CPU内核&#xff0c;可以使用--cpuset-cpus选项来使某些程序独享CPU核心&#xff0c; 以便提高其处理速度&#xff0c;对应的Cgroup文件为/sys/fs/cgroup/cpuset/docker/容器ID号/cpuset.…

vscode推送gitee方法

有一套uni-app代码需要修改&#xff0c;版本控制使用vscode的git功能&#xff0c;远程库在gitee上。 1、设置vscode中git.exe路径 由于git使用了绿色便携版&#xff08;PortableGit-2.42.0.2-64-bit.7z.exe&#xff09;&#xff0c;vscode未识别到git安装路径&#xff0c;需要…

私有云:架构图

私有云&#xff1a;架构图 1、架构图2、服务器分配及配置3、本地物理机hosts文件配置4、相关软件包5、本地物理机电脑配置参考【内存最好20G往上】 机缘巧合之下突然想玩玩虚拟化&#xff0c;然后就查资料本地自己搭建一套私有云 使用【VMware Workstation】这个虚拟化软件来进…

爬虫采集如何解决ip被限制的问题呢?

在进行爬虫采集的过程中&#xff0c;很多开发者会遇到IP被限制的问题&#xff0c;这给采集工作带来了很大的不便。那么&#xff0c;如何解决这个问题呢&#xff1f;下面我们将从以下几个方面进行探讨。 一、了解网站的反爬机制 首先&#xff0c;我们需要了解目标网站的反爬机制…

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(二)板卡总体设计

2.2 板卡总体设计 本章开发了一款基于 AD7193RJ45 的多类型传感信号同步调理板卡&#xff0c;如图 2.4 所 示&#xff0c;负责将传感器传来的模拟电信号转化为数字信号&#xff0c;以供数据采集系统采集&#xff0c;实现了 单通道自由切换传感信号类型与同步采集多类型传…

Qt之彻底解决QSpinBox限定范围无效的问题

QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示: 当取值范围包含负数时,负号后也可以一直输入0,如下图所示: 还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9 虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为…

2023年Q3企业邮箱安全性报告:境内钓鱼邮件超过境外攻击

10月25日&#xff0c;Coremail邮件安全联合北京中睿天下信息技术有限公司发布《2023年第三季度企业邮箱安全性研究报告》。2023年第三季度企业邮箱安全呈现出何种态势&#xff1f;作为邮箱管理员&#xff0c;我们又该如何做好防护&#xff1f; 以下为精华版阅读&#xff0c;如需…

uni-app 在 APP 端的版本强制更新与热更新

整包更新与热更新的区别 ① 整包更新是指下载完整 apk 文件进行覆盖安装 ② 热更新是指把 app 有改动的地方打包进 wgt 文件&#xff0c;只更新 wgt 文件中的内容&#xff0c;不进行整包安装&#xff0c;在用户视角也叫做省流量更新 版本号规则约束 建议严格遵循 Semantic …

简述低功耗语音芯片的含义与特点

低功耗语音芯片是一种功耗较低的集成电路&#xff0c;其集成了语音处理、控制逻辑等多个功能。相比传统的语音芯片&#xff0c;低功耗语音芯片能够在功耗较低的情况下完成更多的功能&#xff0c;因此非常适合移动设备和可穿戴设备等对功耗要求较高的场景。 低功耗语音芯片的主要…

《SpringBoot项目实战》第五篇—接口发生异常如何统一处理

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 本文参考项目源码地址&#xff1a;summo-springboot-interface-demo 前言 大家好&#xff01;…

漏洞复现-jquery-picture-cut 任意文件上传_(CVE-2018-9208)

jquery-picture-cut 任意文件上传_&#xff08;CVE-2018-9208&#xff09; 漏洞信息 jQuery Picture Cut v1.1以下版本中存在安全漏洞CVE-2018-9208文件上传漏洞 描述 ​ picture cut是一个jquery插件&#xff0c;以友好和简单的方式处理图像&#xff0c;具有基于bootstrap…

V3Det大规模词汇视觉检测数据集与LaRS海上全景障碍物检测数据集

V3Det与LaRS是ICCV2023上发表的数据集工作&#xff0c;规模都比较大&#xff0c;后续有可能会用到&#xff0c;因此记录下来。 V3Det: Vast Vocabulary Visual Detection Dataset Paper: https://arxiv.org/abs/2304.03752 URL: https://v3det.openxlab.org.cn/ 在现实世界中…

出租屋智能视频监控系统方案:全面保卫租客安全

除了我们常见的家庭、社区、园区等智能监控&#xff0c;出租房作为很多人的暂住所也极易发生盗窃等事件&#xff0c;为保障大众租户的财产安全&#xff0c;旭帆科技特地针对出租屋制定了智能监控系统方案。 1、安装智能安防摄像头 高清晰度、夜视功能良好的智能摄像头&#xf…

postgresql 实践

环境搭建 参考&#xff1a;http://www.lvesu.com/blog/main/cms-532.html # 需要安装 postgresql-devel 插件 yum install postgresql-devel* # 安装 pg 和 py 的驱动&#xff1a; # Debian系: apt-get install libpq-dev python-dev # RedHat系&#xff1a; yum install lib…

GSCoolink GSV6127 HDMI 2.0/DisplayPort 1.4到MIPI CSI-2嵌入式MCU混合转换器芯片

Gscoolink GSV6127是一款高性能、低功耗的HDMI 2.0/DisplayPort 1.4到MIPI CSI-2混合转换器。通过集成基于RISC-V的增强型微控制器&#xff0c;GSV6127创造了一种具有成本效益的解决方案&#xff0c;提供了上市时间优势。DisplayPort接收支持高达32.4Gbps&#xff08;HBR3&…

Java数据类型,变量与运算符

1.字面常量 常量是在程序运行期间&#xff0c;固定不变的量称为常量。 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} } 在以上程序中&#xff0c;输出的Hello Word&#xff0c;其中的“Hello Word”就是…

工业自动化产品抗干扰笔记

工业自动化产品抗干扰笔记 名词解释&#xff1a; 耦合矢量控制寄生振荡热噪点闪变噪点尖峰噪点反电势集肤效应交流电阻感抗容抗寄生电容共模与差模电场和磁场漏电流浪涌电压电流传输与电压传输各种地线解析 一、干扰来源&#xff1a; 任何一个电磁干扰现象都具有电磁干扰源…

前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars

目录 Webpack简介 Entry Module Chunk Loader Plugin Output Webpack的启动流程 Webpack的优缺点 Webpack的使用 1. 安装Webpack 2. 创建Webpack配置文件 3. 编写代码 4. 运行Webpack 5. 在HTML中引入打包后的文件 6. 执行编译命令 Webpack其他功能介绍 1. 使…

[游戏开发][Unity] Xlua生成wrap文件报错、打AB包Wrap报错

Xlua生成wrap文件&#xff0c;自带添加了ref字段报错 例如Material生成MaterialWrap时&#xff0c;EnableKeyword(in LocalKeyword keyword);带着in关键字&#xff0c;所以在Wrap文件中会自动在参数前生成ref关键字导致编译不过 解决办法&#xff1a; 换Xlua版本就好了&#…