react hooks实现防抖节流的方法小结

 更新时间:2024年04月19日 09:04:43   作者:双子座434  
这篇文章主要介绍了react hooks实现防抖节流的几种方法,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

下面均拿一个input框的onChange事件为例。

防抖

1.当持续触发事件时,一定时间段内没有再触发事件,事件处理函数会执行一次。

2.如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

代码:

方法一:

import React from "react";
 
function ThrotShak() {
  let shak;
 
  const service = (data) => {
    console.log('向服务端发送数据', data);
  }
 
  const handleChange = (e) => {
    if (shak) {
      clearTimeout(shak)
    }
 
    shak = setTimeout(() => {
      service(e.target.event);
    }, 3000)
  }
 
  return (
      <div style={{ flex: 1, border: '1px solid blue', padding: '3px' }}>
        <div>防抖:多次触发执行最后一次</div>
        <input onChange={handleChange} />
      </div>
  )
}
 
export default ThrotShak;

方法二:

import React from 'react';
import { debounce } from 'lodash';
 
function ThrotShak(){
  const service = (data) => {
    console.log('向服务端发送数据', data);
  }
 
  const handleChange = () => debounce(service, 500);
 
  return (
    <input type="text" onChange={handleChange} />
  );
};
 
export default ThrotShak;

节流

当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

代码:

方法一:

import React from "react";
 
function ThrotShak() {
  const service = (data) => {
    console.log('向服务端发送数据', data, new Date());
  }
  let throt;
 
  function handleChange() {
    if (throt) {
      return ;
    }
    
    throt = setTimeout(() => {
      service();
      throt = null;
    }, 3000)
  }
 
  return (
      <div  style={{ flex: 1, border: '1px solid blue', padding: '3px' }}>
        <div>节流: 持续触发事件时,每过n钟执行一次</div>
        <input onChange={handleChange} />
      </div>
  )
}
 
export default ThrotShak;

方法二:

import React from 'react';
import { throttle } from 'lodash';
 
function ThrotShak(){
  const service = (data) => {
    console.log('向服务端发送数据', data);
  }
 
  const handleChange = () => throttle(service, 500);
 
  return (
    <input type="text" onChange={handleChange} />
  );
};
 
export default ThrotShak;

拓展:

除上面两种实现方法外,还可用用useEffect实现。无论哪种实现方式,大家要以自己的应用场景为准,还要考虑一下性能问题。本身选择防抖或者节流就是要提高性能(减少频繁触发事件,降低不必要的计算,渲染和服务器请求),节约资源(减少浪费服务器资源和带宽),提高用户体验(防止用户误触或者频繁点击)。

实现过程中大家要注意clearTimeout和把赋值参数置为null的区别:clearTimeout是指把定时器清楚掉,并不会把定时器的id置为null,一般用于定时器挂载并未执行时;把赋值参数置为null是要清除缓存,这里不懂得话,可以看一下闭包和浏览器垃圾回收机制得原理。在组件卸载时把定时器清除掉和id置为null一起调用比较好。

心得:

一题多解还是有必要得,既拓宽了自己得思路,又增加了解题技巧,当然,解题还是会受场景和代码框架约束得。

到此这篇关于react hooks实现防抖节流的方法小结的文章就介绍到这了,更多相关react hooks防抖节流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • React生命周期原理与用法踩坑笔记

    React生命周期原理与用法踩坑笔记

    这篇文章主要介绍了React生命周期原理与用法,结合实例形式总结分析了react生命周期原理、用法及相关注意事项,需要的朋友可以参考下
    2020-04-04
  • 解决React报错JSX element type does not have any construct or call signatures

    解决React报错JSX element type does not have any construct

    这篇文章主要为大家介绍了解决React报错JSX element type does not have any construct or call signatures,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 五分钟教你了解一下react路由知识

    五分钟教你了解一下react路由知识

    本文主要介绍了react路由知识,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • React实现类似淘宝tab居中切换效果的示例代码

    React实现类似淘宝tab居中切换效果的示例代码

    这篇文章主要介绍了React实现类似淘宝tab居中切换效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 前端框架react-spring基础用法

    前端框架react-spring基础用法

    这篇文章主要为大家介绍了前端框架react-spring基础用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • React Render Props共享代码技术

    React Render Props共享代码技术

    render props是指一种在 React 组件之间使用一个值为函数的 prop 共享代码的技术。简单来说,给一个组件传入一个prop,这个props是一个函数,函数的作用是用来告诉这个组件需要渲染什么内容,那么这个prop就成为render prop
    2023-01-01
  • React Native模块之Permissions权限申请的实例相机

    React Native模块之Permissions权限申请的实例相机

    这篇文章主要介绍了React Native模块之Permissions权限申请的实例相机的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • React 原理详解

    React 原理详解

    这篇文章主要介绍了深入理解react的原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10
  • react如何实现表格多条件搜索

    react如何实现表格多条件搜索

    这篇文章主要介绍了react如何实现表格多条件搜索问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • React自定义Hook之如何优雅管理复杂列表的筛选状态

    React自定义Hook之如何优雅管理复杂列表的筛选状态

    在Web开发中,渲染包含数千甚至上万条数据的列表是常见需求,这篇文章主要介绍了React自定义Hook之如何优雅管理复杂列表筛选状态的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2026-05-05

最新评论