当前位置: 首页 > news >正文

防抖不同的实现

防抖(Debounce):在事件被触发后,延迟一段时间再执行函数。如果在延迟期间事件再次被触发,则重新计时。常用于搜索框输入、窗口大小调整等场景。

1.不安装任何依赖和库,编写一个防抖的函数

在utils里面增加一个工具函数

/** 防抖 */
export function debounce<T extends (...args: any[]) => any>(func: T,wait: number,immediate: boolean = false//可选,如果true那么会在延迟前立即执行一次
): (...args: Parameters<T>) => void {let timeout: ReturnType<typeof setTimeout> | null = null;return function (this: ThisParameterType<T>, ...args: Parameters<T>) {const context = this;const later = () => {timeout = null;if (!immediate) {func.apply(context, args);}};const callNow = immediate && !timeout;if (timeout) {clearTimeout(timeout);}timeout = setTimeout(later, wait);if (callNow) {func.apply(context, args);}};
}

然后在你需要使用的地方使用就行

const debouncedSaveForm = debounce(saveForm, 300); // 延迟 300 毫秒
<Button type='primary' icon={<SendOutlined />} loading={loading} onClick={debouncedSaveForm}>提交</Button>

简单版本(不需要考虑立即执行的情况)

function debounce(func, wait) {let timeout;return function (...args) {const context = this;clearTimeout(timeout);timeout = setTimeout(() => {func.apply(context, args);}, wait);};
}

2.项目中已经有了Lodash ,可以直接使用内置的_.debounce 方法。

1. 安装 npm install lodash

2. 使用示例

import _ from "lodash";
function sayHello(name) {console.log(`Hello, ${name}!`);
}
const debouncedSayHello = _.debounce(sayHello, 1000);
debouncedSayHello("Alice");

http://www.lryc.cn/news/572571.html

相关文章:

  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • 阿里云OSS对象云储存入门操作
  • 【Leetcode】字符串之二进制求和、字符串相乘
  • 智能危险品搬运机器人市场报告:行业趋势与未来展望
  • 深度学习笔记27-LSTM实现糖尿病探索与预测(Pytorch)
  • 华为云Flexus+DeepSeek征文 | 利用Dify平台构建多智能体协作系统:从单体到集群的完整方案
  • SpringMVC知识点总结
  • C++网络编程入门学习(五)-- CMake 学习笔记
  • iOS应用启动时间优化:通过多工具协作提升iOS App性能表现
  • 在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)
  • 【支持向量机】SVM线性可分支持向量机学习算法——硬间隔最大化支持向量机及例题详解
  • 退出python解释器的四种方式
  • Android中Native向System Service进行Binder通信的示例
  • 解决 Docker 里 DrissionPage 无法连接浏览器的问题,内含直接可用的Docker镜像(DrissionPage 浏览器链接失败 怎么办?)
  • 机构运动分析系统开发(Python实现)
  • WPF xaml 中设置ResourceDictionary中的全局变量
  • JS红宝书笔记 8.2 创建对象
  • 李宏毅《生成式人工智能导论》| 第1讲:什么是生成式人工智能
  • python画三维立体图
  • SpringBoot扩展——应用Web Service!
  • 简单理解HTTP/HTTPS协议
  • C#语言入门-task2 :C# 语言的基本语法结构
  • Python训练营打卡 Day55
  • C++实现手写strstr函数
  • 12.10 在主线程或子线程中更新 UI
  • Tensorflow推理时遇见PTX错误,安装CUDA及CuDNN, 解决问题!
  • 编辑器及脚本案例
  • 【Redis】主从复制
  • Transformer结构介绍
  • 【K8S】详解Labels​​ 和 ​​Annotations