react使用节流函数防止重复点击问题

 更新时间:2023年06月07日 09:26:35   作者:cat10month  
这篇文章主要介绍了react使用节流函数防止重复点击问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用节流函数防止重复点击

react里面写防抖和节流函数

节流函数利用闭包来设置定时器,节流函数3s内只能点击一次,点击后立即触发,重复点击无效,必须等3s之后才能点击第二次

节流函数:

react使用节流函数

防抖函数:

防抖函数3s之后出结果,重复点击无效,如果重复点击了,重新计算3s时间,从点击的时刻算起,必须等待3s时间触发事件

react使用防抖函数

建议直接使用lodash的throttle和debounce方法

import * as _ from 'lodash';
_.throttle(()=>{
	console.log("throttle");
}, 100);
_.debounce(()=> {
  console.log("debounce");
}, 2000

react防抖和节流

定义

  • 节流: 一段时间内只运行一次,若在这段时间内重复触发,只有第一次生效
  • 防抖: 一段时间后在执行该事件,若在这段时间内被重复触发,则重新计时

节流一般用在按钮上,防抖一般用在搜索上

节流

// 这个是点第一次的时候立即生效,接下来在一定时间内再点就不生效了,直到这段时间过去
function throttle (fn, delay) {
    let flag = true;
    return function () {
        if(flag){
            flag = false;
            fn();
            setTimeout(() => {
                flag = true;
            }, delay);   
        }    
    }
}
// 这个是点第一次的时候不生效,直到这段时间过去无论点了多少次只有一次生效
function throttle (fn, delay) {
    let flag = true;
    return function () {
        if(flag){
            flag = false; // 这个放在上面还是下面应该都可以
            setTimeout(() => {
                fn();
                flag = true;
            }, delay);   
        }    
    }
}

防抖

// 一段时间后执行某段代码,如果在这段时间之内再次点击了,会清除当前的定时器,重新开一个定时器
// 直到时间结束这段代码被执行,不然会一直重复这个过程,这段代码一直不会被执行
function debounce(fn, delay){
    let timer = null;
    return function(){
        clearTimeout(timer);
        timer = setTimeout(()=> {
            fn();
        }, delay)
    }
}

react封装好的防抖和节流

第三方函数工具库:lodash

安装:npm i lodash

引入:import _ from 'lodash'

// 防抖  反复触发执行最后一次 //使用useCallback防止debounce失效
  const debounce = _.debounce;
  const getSuggestion = useCallback(
    debounce((val: string, type: boolean) => {
      type ? message.success(val) : message.warning(val);
    }, 300),
    [],
);
// 节流
const throttle = _.throttle;
const getSuggestion = 
throttle((val: string, type: boolean) => {
    type ? message.success(val) : message.warning(val);
}, 300);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • React BootStrap用户体验框架快速上手

    React BootStrap用户体验框架快速上手

    这篇文章主要介绍了React BootStrap用户体验框架快速上手的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • React中useEffect原理的代码简单实现详解

    React中useEffect原理的代码简单实现详解

    React的useEffect钩子是React函数组件中处理副作用,本文将通过一个简单的例子解释如何用代码实现useEffect的基本原理,感兴趣的小伙伴可以了解下
    2023-12-12
  • react页面中存在多个input时巧妙设置value属性方式

    react页面中存在多个input时巧妙设置value属性方式

    这篇文章主要介绍了react页面中存在多个input时巧妙设置value属性方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • ReactNative之FlatList的具体使用方法

    ReactNative之FlatList的具体使用方法

    本篇文章主要介绍了ReactNative之FlatList的具体使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • react使用echart绘制地图的案例

    react使用echart绘制地图的案例

    这篇文章主要介绍了react使用echart绘制地图,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • 利用React高阶组件实现一个面包屑导航的示例

    利用React高阶组件实现一个面包屑导航的示例

    这篇文章主要介绍了利用React高阶组件实现一个面包屑导航的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • React中DOM事件和状态介绍

    React中DOM事件和状态介绍

    这篇文章主要介绍了React中DOM事件和状态介绍,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-08-08
  • Electron打包React生成桌面应用方法详解

    Electron打包React生成桌面应用方法详解

    这篇文章主要介绍了React+Electron快速创建并打包成桌面应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • React父子组件传值(组件通信)的实现方法

    React父子组件传值(组件通信)的实现方法

    本文主要介绍了React父子组件传值(组件通信)的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • ReactQuery系列React Query 实践示例详解

    ReactQuery系列React Query 实践示例详解

    这篇文章主要为大家介绍了ReactQuery系列React Query 实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论