React 防抖(Debounce)Hook
防抖动 (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)的方法,也许存在边界情况未考虑,酌情使用。
React 防抖(Debounce)Hook的更多相关文章
- C#.Net下的防抖-Debounce和节流阀-Throttle功能实现
C#下的防抖-Debounce.节流阀-Throttle功能实现 防抖-Debounce 连续的多次调用,只有在调用停止之后的一段时间内不再调用,然后才执行一次处理过程. 节流阀-Throttle 连 ...
- [JavaScript] 函数节流(throttle)和函数防抖(debounce)
js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁触发,但是我们不想让他触发的这么频繁,于是我们就设置一个定时器让这个事件在 xxx 秒 ...
- 防抖debounce和节流throttle
大纲 一.出现缘由 二.什么是防抖debounce和节流throttle 三.应用场景 3.1防抖 3.2节流 一.出现缘由 前端开发中,有一部分用户行为会频繁触发事件,而对于DOM操作,资源加载等耗 ...
- React+DvaJS 之 hook 路由权限控制
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...
- JavaScript 高级系列之节流 [throttle] 与防抖 [debounce]
一.概念 这两个东西都是为了项目优化而出现的,官方是没有具体定义的,他们的出现主要是为了解决一些短时间内连续执行的事件带来性能上的不佳和内存的消耗巨大等问题:像这类事件一般像 scroll keyup ...
- 手写封装防抖debounce
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java版的防抖(debounce)和节流(throttle)
概念 防抖(debounce) 当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时. 防抖,即如果短时间内大量触发同一事件,都会 ...
- 节流throttle和防抖debounce
underscore.js提供了很多很有用的函数,今天想说说其中的两个.这两个函数都用于限制函数的执行. debounce 在解释这个函数前,我们先从一个例子看下这个函数的使用场景.假设我们网站有个搜 ...
- js 防抖 debounce 与 节流 throttle
debounce(防抖) 与 throttle(节流) 主要是用于用户交互处理过程中的性能优化.都是为了避免在短时间内重复触发(比如scrollTop等导致的回流.http请求等)导致的资源浪费问题. ...
- [JavaScript] 节流(throttle)-防抖(debounce) 不懵圈指北
网易云课堂 > 微专业 > 前端高级开发工程师 01.前端高级-JavaScript进阶 > 3.函数式编程 Underscore源码分析 > 3.4.3 throttle 与 ...
随机推荐
- manim边学边做--点
几何图形是manim中最重要的一类模块,manim内置了丰富的各类几何图形,本篇从最简单的点开始,逐个介绍manim中的几何模块. manim中点相关的模块主要有3个: Dot:通用的点 Labele ...
- Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持
就在昨晚,Spring AI发了个比较重要的更新.由于最近OpenAI推出了结构化输出的功能,可确保 AI 生成的响应严格遵守预定义的 JSON 模式.此功能显着提高了人工智能生成内容在现实应用中的可 ...
- 进击的AI工具集:全能AI阅读软件Walles AI
在信息爆炸的时代,快速而准确地阅读大量内容,对于每个人都是一种常态挑战. 这些海量信息资讯和知识的涌入,可能导致信息过载,手忙脚乱,且分神费力. 好消息是,我们已经进入了 AIGC时代,随着ChatG ...
- 【CDQ分治】【模板】三维偏序(陌上花开)
P3810 [模板]三维偏序(陌上花开) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc++.h> using namespace ...
- CAN学习笔记(一)CAN入门
CAN学习笔记(一)CAN入门 参考链接:https://blog.csdn.net/2301_77952570/article/details/131114941 CAN收发器的作用 发:将TTL电 ...
- Snap 使用
Snap 是一个或多个应用程序的捆绑包,可在许多不同的 Linux 发行版中使用,无需依赖或修改.Snap 可从 Snap Store(一个拥有数百万用户的公共应用程序商店)中发现和安装.很多常用的软 ...
- HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容
背景 随着消费电子产品和移动互联网的普及,未成年人互联网普及率96.8%,超过80%的未成年人都拥有自己的上网设备,而如何引导孩子正确上网一直是家长们的担忧.市场上很多电子设备.系统推出了一些未成年人 ...
- Centos7.9安装Docker和Docker compose
什么是docker环境 Docker环境是指在计算机中安装和配置了Docker引擎的运行环境.Docker是一种容器化平台,它提供了一种轻量级的虚拟化技术,能够将应用程序及其依赖项打包成一个独立的容器 ...
- 万字长文全面详解现代C++智能指针:原理、应用和陷阱
现代C++智能指针详解:原理.应用和陷阱 智能指针是C++11引入的新特性.本篇文章详细介绍了C++智能指针的原理.应用与陷阱,通过丰富的代码实例介绍了三种智能指针:std::unique_ptr.s ...
- 二叉树的 Morris 中序遍历——O(1)空间复杂度
回顾 问题陈述: 给定一棵二叉树,实现中序遍历并返回包含其中序序列的数组 例如给定下列二叉树: 我们按照左.根.右的顺序递归遍历二叉树,得到以下遍历: 最终中序遍历结果可以输出为: [3, 1, 9, ...