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

React 自定义hook 之 防抖和节流

一、简介

        防抖和节流主要用于控制事件触发频率,提高页面性能和用户体验。

        防抖: 当事件被触发后,在一定时间内有新的对应事件,则会取消老的事件执行。

        节流: 当事件触发后,在一定时间内会忽略新的事件执行。

二、技术实现

1、useDebounce hook

export const useDebounce = (state, delay) => {const [debounceState, setDebounceState] = useState({...state});useEffect(() => {const timeout =  setTimeout(() => {setDebounceParam({...param,});}, delay);return () => clearTimeout(timeout);}, [state]);}

使用样例:

export UserComponent = ()=>{const [userName, setUserName] = useState("");const [user, setUser] = useState({});const debounceUserName = useDebounce(userName, 300);useEffect(() => {User user = getUserByUserName(userName);setUser(...user);}, [debounceUserName]);return (<div>用户名:<input type = 'text' value = {userName} onChange = {setUserName}/>用户信息: <span>{user.info}</span><div/>    );
}

2.useThrottle hook

export const useThrottle = (state, limit) =>{const [throttleState, setThrottleState] = useState(...state);// 记录下上次触发的时间const [lastTrigger, setLastTrigger] = useState(Date.now());useEffect(() => {const timeout = setTimeOut(() =>{if (Date.now() - lastTrigger < dealy){return;}setThrottleState(throttleState);setLastTrigger(now);});return clearTimeout(timeout);}, [state])
}

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

相关文章:

  • CVE-2022-21661
  • 【Python】tensorboard实时查看模型训练过程的方法示例
  • Golang基础-面向对象篇
  • 全国的科技创新情况数据分享,涵盖2020-2022年三年情况
  • visionOS空间计算实战开发教程Day 1:环境安装和编写第一个程序
  • java常见数值类型取值范围/ int short long BigInteger取值范围
  • echarts产品日常奇怪需求
  • CSDN文章保存为MD文档(一)
  • 【tomcat】java.lang.Exception: Socket bind failed: [730048
  • 什么是高防IP?有什么优势?怎么选择高防IP?
  • 不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>
  • 千兆光模块和万兆光模块的供应链管理
  • pytorch训练出现的bug
  • 【AGC】集成AGC服务上架应用市场审核问题
  • element emitter broadcast向下广播 dispatch向上分派
  • 基于 Modbus 的工业数据采集、控制(part 2)
  • vue前端项目如何配置后端项目的请求地址
  • Lora学习资料汇总
  • Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复
  • 在线视频课程教育系统源码/网课网校/知识付费/在线教育系统/在线课程培训系统源码
  • 程序员护城河:保障系统安全与网络稳定的不可或缺力量
  • html属性值可以不用引号吗,实例验证
  • angular 实现模块共享
  • 带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!
  • 易点易动设备管理系统提升设备能耗管理和设备状态监控效率
  • 【idea】解决idea 执行maven build总下载 Downloading maven-metadata.xml文件
  • HttpClient发送MultipartFile多文件及多参数请求
  • TMUX设置鼠标滚轮滑动来浏览之前的前面内容
  • 「go查漏补缺」命名规则以及 GROM 结构体的应用
  • Django 集成 Celery 实现高效的异步任务处理