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

react 封装防抖

封装防抖

import React, { useRef, useEffect, useCallback } from 'react';
 
function useDebounce(fn, delay) {
  const delayRef = useRef(delay);
  const fnRef = useRef(fn);
 
  // 更新ref值
  useEffect(() => {
    delayRef.current = delay;
  }, [delay]);
 
  useEffect(() => {
    fnRef.current = fn;
  }, [fn]);
 
  const debounced = useRef();
 
  // 防抖函数
  const debounce = useCallback((...args) => {
    const later = () => {
      debounced.current = null;
    };
 
    clearTimeout(debounced.current);
    debounced.current = setTimeout(() => {
      fnRef.current(...args);
      later();
    }, delayRef.current);
  }, []);
 
  useEffect(
    () => () => {
      clearTimeout(debounced.current);
    },
    []
  );
 
  return debounce;
}
 
export default useDebounce;

使用方法

import React, { useState } from 'react';
import useDebounce from './useDebounce';
 
const MyComponent = () => { 
  // 创建防抖函数
  const debouncedHandleChange = useDebounce(() => {
    console.log('防抖触发了');
  }, 500);
 
  return (
    <input
      type="text"
      value={value}
      onChange={(e) => {
        debouncedHandleChange(e);
      }}
    />
  );
};
 
export default MyComponent;

注:本人前端小白 ,如有不对的地方还请多多指教


http://www.kler.cn/news/343179.html

相关文章:

  • 【优选算法】--- 分治 快速排序
  • 如何快速给word文件加拼音?请跟着步骤完成吧
  • centos7更新yum国内源
  • 【hot100-java】合并 K 个升序链表
  • 【含文档】基于Springboot+Vue的小区家政服务预约平台(含源码+数据库+lw)
  • CST软件优化超表面--- 偏振片- 线圆极化转换,天线阵任务,远场算轴比AR
  • 学习之偏函数
  • 数据挖掘学习笔记:朴素贝叶斯 | Python复现
  • 搬砖10、Python 图形用户界面和游戏开发
  • java:pdfbox 3.0 去除扫描版PDF中文本水印
  • 电子取证新视角:Windows系统中文用户输入痕迹信息提取方法研究与实现
  • 使用Qt Creator创建项目
  • 腾讯云SDK用量统计
  • SpringBoot开发——整合Actuator监控和管理Spring Boot 应用
  • vuex安装报错
  • v-html里面的标签设置样式没有用怎么办?
  • 尚硅谷rabbitmq 2024第30-33节 死信队列 答疑
  • Linux:进程调度算法和进程地址空间
  • No.9 笔记 | PHP学习指南:从入门到精通的要点总结
  • 关于Integer和int的拆箱和装箱