React 防抖动(debounce) Hook

React中如何实现防抖效果 防抖是一种常用的优化技术,用于限制事件处理函数的执行频率。在React中,我们可以通过编写自定义的防抖函数来实现防抖效果。通过使用防抖函数,我们限制了事件处理函数的执行频率,只有在用户输入停止一段时间后,才会触发真正的事件处理逻辑。防抖的原理是在事件触发后延迟一段时间执行事件处理函数,如果在延迟期间又触发了相同的事件,则重新计时。通过上述代码,我们实现了一个简单的防抖功能的React组件。最后,我们在组件的返回值中渲染了一个输入框和一个显示防抖后的值的段落元素。在组件的渲染过程中,我们将防抖函数应用到了。 阅读详情

防抖动 (debounce)是常见的需求,那么如何搭配 React Hooks 实现防抖动呢,下面演示两种方案。

方案一

副作用防抖

/**
 *
 * @param {React.EffectCallback} fn
 * @param {React.DependencyList} deps
 * @param {number} ms
 */
function useDebouncedEffect(fn, ms, deps) {
  useEffect(() => {
    let clean = null;
    const timer = setTimeout(() => {
      clean = fn();
    }, ms);
    return () => {
      clearTimeout(timer);
      if (clean) clean();
    };
  }, deps);
}

使用方式与 useEffect 一样,只是多了一个参数:

useDebouncedEffect(() => { ... }, 200, [val]);

方案二

/**
 * @template {(...args: any[]) => void} T
 * @param {T} fn
 * @param {React.DependencyList} deps
 * @param {number} ms
 * @returns {T}
 */
function useDebouncedCallback(fn, ms, deps) {
  const timerRef = useRef(null);
  const funcRef = useRef(null);

  useEffect(() => {
    return () => {
      clearTimeout(timerRef.current);
      funcRef.current = null;
    };
  }, []);

  return useMemo(() => {
    funcRef.current = fn;
    return function (...args) {
      clearTimeout(timerRef.current);
      timerRef.current = setTimeout(() => funcRef.current(...args), ms);
    };
  }, deps);
}

使用方式与 useCallback 一样,只是多了一个参数:

const func = useDebouncedCallback((...args) => { ... }, 200, [val]);

总结

上面演示了两种应用 React Hooks 实现防抖(debounce)的方法,实际应用过程中可能还需考虑组件 unmount 时的边界情况,酌情使用。

一文读懂世界模型(World Model):AI的“数字大脑”,通往AGI的核心基石 世界模型正成为AI领域的关键技术,它让AI在虚拟环境中模拟物理世界规律并预测行动后果,从而减少现实试错成本。2018年Ha和Schmidhuber提出的VAE+RNN架构奠定基础,2022年后自监督学习推动快速发展。当前世界模型分为潜空间、生成式、强化学习和对象中心四大流派,已在机器人、自动驾驶、工业仿真等领域落地应用。尽管面临长时序预测误差等挑战,未来将向多模态建模、大模型融合等方向发展,成为实现具身智能和通用人工智能的核心基石。 阅读详情

相关推荐

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 809

一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)

在自定义 hook 中,使用了另外一个 state 进行保存和更新状态,只有在间隔时间到了才会更新,然后将这个新的 state 返回出去,在页面上可以这样使用,直接依赖 返回出来的状态,这样每次这个状态改变时,就是间隔时间到了的时候,就可以进行异步请求了。而节流函数则是每隔一段时间就执行一次请求。在前端开发中,防抖和节流函数几乎是必备的技能,它们的实现原理都离不开 js 闭包的特性,而在 React 中通过使用自定义的 hook,可以达到一样的效果,有些场景下可能还更方便些,但总的来说本质还是那样。

小陈的博客 7731

SAP PCC成本收集器实战:从配置到结算的完整流程解析

本文详细解析了SAP PCC成本收集器从配置到结算的完整流程,特别适用于重复制造行业。通过实战案例和配置要点,帮助用户掌握物料分类账管理、成本中心费用归集及差异分析等核心功能,提升企业生产成本控制效率。

weixin_29251567的博客 893

React中实现防抖功能的两种方式

问题 这有一个简单的防抖函数,短时间内多次触发同一事件,只执行最后一次 function debounce (fn, wait) { let timer = null return function (...args) { if (timer !== null) { clearTimeout(timer) } timer = setTimeout(() => { fn(args) timer = null }, wait)

milugloomy的博客 9694

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

本文详细介绍了在RK3588 Android12系统上实战RTL8723DU WiFi蓝牙双模驱动移植的全过程。从驱动源码获取与修改、系统级集成与编译,到调试与性能优化,提供了完整的解决方案。特别针对USB接口适配、电源管理和蓝牙共存等关键问题给出了具体代码示例,帮助开发者快速完成驱动适配并提升设备稳定性。

weixin_28703489的博客 324

微信小程序 - 解决请求报错 request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID

微信小程序报错“request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID“,微信小程序请求报错,微信小程序errcode:-201,服务器报错,无法调用接口,微信小程序真机https请求失败,微信小程序wx.request接口报错,小程序真机调试运行接口都报错了,真机测试下网络请求都不行了且报错,证书没问题依旧报错,检查HTTPS证书,ssl证书,使用浏览器测试访问证书是正常的,不是证书问题,请

🏆 前端领域优质创作者 1万+

react防抖和节流hooks封装

react防抖和节流hooks封装以及注意事项

任磊 2696

Mac版 Android Studio自带模拟器无法联网解决方案

前言 作为一枚安卓开发者,免不了使用模拟器来开发调试(毕竟它比手机方便太多)。但是因为适配需要,我们会更多的使用真机开发调试,那么当模拟器遇到这样那样的问题,我们往往会无从下手,其中最烦的就是网络问题。 我最近图方便,又重新用起了模拟器,但是发现联网失败,用模拟器内置的浏览器也打不开网页,于是百度上一通找,毫无效果,各种说用cmd命令行设置模拟器dns的都没用,显示没有什么dns文件啥的,后来...

陈万洲的专栏 1万+

React 防抖与节流用法

当用户频繁滚动页面或调整窗口大小时,我们可以设置一个固定的时间间隔,只在该时间间隔内执行一次回调函数。在React中使用防抖的常见场景是处理输入框的搜索功能。当用户输入时,我们可以设置一个延迟时间,只有在用户停止输入一段时间后才触发搜索请求。请注意,以上示例代码中使用了Lodash库来提供防抖和节流的函数。函数会被调用,但是由于节流的作用,只有在200毫秒内第一次滚动事件触发时,才会真正执行滚动逻辑。但是,由于防抖的作用,只有在用户停止输入500毫秒后,才会执行真正的搜索逻辑。在上面的代码中,我们使用。

TianXuab的博客 2135

支付域——账户系统设计

本文详细介绍了支付域中的账户系统设计,包括账户的定义、核心特征、常见类型以及在支付系统中的作用。账户是支付平台为用户、商户等主体建立的资金记录单元,具有资金归属、余额管理、交易流水、资金安全等核心特征。常见账户类型包括用户账户、商户账户、平台账户、保证金账户等。此外,还探讨了账户与银行账户的区别、账户的结构设计、如何设计账户类型以及账户系统设计等内容。

庄小焱 1189

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】Caliper从0到使用

技能大赛样题解析,caliper题目从0到使用

weixin_52865146的博客 2076

【笔记/总结】React Hook实现防抖函数

原视频: Youtube - React Debounce Search Input API Call | useDebounce React Hook 参考:防抖和节流及对应的React Hooks封装

weixin_44425025的博客 750

超大规模系统(千万级用户)中实现字段级权限控制

摘要:本文提出了一套分布式架构下的字段级权限优化方案,结合RBAC+ABAC混合模型与技术手段实现性能与安全的平衡。方案包括:1)权限模型优化,采用RBAC预计算基础权限与ABAC动态校验敏感字段;2)数据层优化,实现动态字段过滤与加密存储;3)多级缓存策略与预计算机制提升性能;4)分布式架构设计,通过网关校验和策略引擎集群保证扩展性。最终在千万级用户系统中实现99.9%可用性,权限校验延迟控制在50ms以内。

从技术实践立足,从项目管理方法论延伸思考 1348

huse网络请求:useRequest、usePoll等6个异步Hook最佳实践

在现代React应用开发中,异步数据处理是核心挑战之一。huse作为一个功能丰富的React Hooks库,提供了一系列强大的异步Hook工具,帮助开发者轻松处理网络请求、定时任务和状态管理。本文将深入介绍6个实用的异步Hook:useRequest、usePoll、useDebounced系列、useOptimistic系列和useActionPending,带你掌握它们的最佳实践和应用场景。

gitblog_01177的博客 807

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用指南:深入了解 `use-debounce`

`use-debounce` 是一个专为React设计的轻量级(< 1Kb)debounce钩子库。它提供了简单而高效的方法来实现值的延时处理和回调函数的防抖动,对于优化React应用中频繁触发的事件(如输入框监听、滚动事件)非常有用。该项目托管在GitHub上,由xnimorz维护,并遵循MIT许可证。 ## 目录结构及介绍 以下是`use-debounce`项目的主要目录结构: ```m

gitblog_00051的博客 457

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

3个自定义防抖Hooks的实现原理

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享部分文档展示:文章篇幅有限,后面的内容就不一一展示了有需要的小伙伴,可以点下方卡片免费领取。

军火库 2349

硬件断点反跳似乎_如何用反作用钩反跳道具

硬件断点反跳似乎If you are reading this post, you probably know what it means to debounce user input and want to see how to use it in your React app. Just in case you read the title of this post and said, “De...

weixin_26729241的博客 170

海量聊天消息列表性能优化:虚拟列表与滚动定位实战

在前端开发中,处理大规模数据列表的渲染是常见的性能挑战,尤其在即时通讯、社交应用等场景下,聊天消息列表的性能直接影响用户体验。其核心原理在于浏览器对DOM节点的渲染与管理机制,当节点数量激增时,会引发重排、重绘和内存占用飙升,导致页面卡顿甚至白屏。为解决此问题,虚拟列表技术应运而生,它通过仅渲染可视区域内的少量节点,从根本上解决了DOM节点爆炸的瓶颈。结合数据分页与懒加载,可以进一步优化内存使用和网络请求。在工程实践中,精确的滚动定位与智能的自动滚动管理是保障交互流畅性的关键,例如通过判断用户意图来决定是否

weixin_30904593的博客 364

防抖节流以及React Hook中的防抖节流

React Hook防抖前言一、pandas是什么?二、使用步骤1.引入库2.读入数据使用Umi Hooks防抖节流 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): impor

lovezhuer1的博客 5307

react中怎么实现防抖Debounce和节流Throttle

这些实现可以有效优化性能,减少不必要的操作。

m0_73574455的博客 1390

react使用防抖

搜索框,如果我每次键入的时候,我就会在setDebounceMembers存一次键入的内容,因为我是根据debounceMembers变化来调用getTenantProductMenager方法,所以这边只要在setDebounceMembers存就行了。需求:搜索栏中输入内容是,之前是每键入一次就会请求后台一次,这样会影响性能,所以需要优化,使用useDebounce来实现防抖。因为我们这里是在搜索框中使用防抖,所以我们定义一个变量来存我们搜索框中键入的数据。先引入useDebounce。

weixin_55555471的博客 947

react简单实现防抖和节流

在日常开发中,我们经常会有防抖和节流的需要,可以减小服务器端压力,提升用户体验,本文就详细的介绍了react简单实现防抖和节流。

qq_17189095的博客 1008

使用debounce在react函数组件中做防抖

使用debounce在react函数组件中做防抖 背景 在项目中有这样的常见需求: ​ 提供一个搜索输入框,输入框需要响应用户的输入并且不需要用户点击搜索按钮直接发起搜索。 思路 1. 普通实现 其实这样的需求很常见,也并不难,第一反应就是监听用户输入,只要用户有输入操作立即拿到用户输入的数据直接发起搜索查询 优点:响应迅速,并且确实可以达到需求的效果。 缺点:发送多洗无效请求,浪费服务器的性能资源,增加服务器负担。 2. 防抖函数 使用防抖函数(debounce或者lodash.debounc

Joey_Tribiani的博客 2669

react项目中使用lodash的debounce

react中使用lodash的debounce,使用如下: constructor(props: Props) { super(props); this.state = { value: "", }; this.handleChange = this.handleChange.bind(this); this.debounceInput = _.debounce(this.debounceInput, 500); } handleCha.

CamilleZJ的博客 3265

React 窗口防抖:提升网页性能的利器

React 窗口防抖是一种优化网页性能的技术,它能够有效地减少浏览器中不必要的渲染和计算,从而提高网页的响应速度和用户体验。在本文中,我们将探讨 React 窗口防抖的原理、应用场景以及如何在你的 React 项目中使用它。

TianXuab的博客 780

react接口防抖处理

本文介绍了防抖(Debounce)技术及其在React中的实现。防抖通过延迟函数执行,避免频繁触发,类似电梯门延迟关闭的原理。文章详细解析了一个React自定义Hook——useDebounce的实现,它使用useRef保存定时器引用,useCallback缓存函数,支持Promise处理异步操作。该Hook可应用于搜索框输入、窗口调整等场景,通过清除和重置定时器确保只执行最后一次调用。最后通过流程图展示了防抖的工作机制,并总结了其性能优化、提升用户体验等优势。

gxy03的博客 707

react中 防抖与节流

服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能类似。防抖是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。文本输入的验证,连续输入文字后发送 AJAX 请求进行验证,验证一次就好。节流函数原理:确保在连续触发事件的过程中,某一时间段内只执行一次操作。防抖函数的原理:保证在连续触发事件的过程中,只执行最后一次操作。拖拽场景:固定时间内只执行一次,防止超高频次触发位置变动。按钮提交场景:防止多次提交按钮,只执行最后提交的一次。

2302_80769715的博客 841
上一篇: JS 绘制 Cardinal 样条曲线
下一篇: JS 使用协程处理事件
one bite
博客等级 码龄18年 60粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值