react 封装防抖

封装防抖

javascript 复制代码
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;

使用方法

javascript 复制代码
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;

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

相关推荐
木易 士心19 分钟前
Promise深度解析:前端异步编程的核心
前端·javascript
im_AMBER23 分钟前
Web 开发 21
前端·学习
又是忙碌的一天23 分钟前
前端学习day01
前端·学习·html
Joker Zxc27 分钟前
【前端基础】20、CSS属性——transform、translate、transition
前端·css
excel31 分钟前
深入解析 Vue 3 源码:computed 的底层实现原理
前端·javascript·vue.js
大前端helloworld44 分钟前
前端梳理体系从常问问题去完善-框架篇(react生态)
前端
不会算法的小灰1 小时前
HTML简单入门—— 基础标签与路径解析
前端·算法·html
zero13_小葵司1 小时前
在Vue项目中构建后端配置的动态路由及权限控制体系
前端·javascript·vue.js
GISer_Jing1 小时前
前端框架篇——Vue&React篇
前端·javascript
面向星辰1 小时前
css其他选择器(精细修饰)
前端·css