Skip to content

useDebounceFn ​

一个用于对函数进行防抖处理的 React Hook,在函数频繁调用时延迟执行。

功能特性 ​

  • ✅ 函数防抖: 对频繁调用的函数进行防抖处理
  • ✅ 可配置延迟: 自定义防抖延迟时间
  • ✅ 类型安全: 完整的 TypeScript 类型支持
  • ✅ 取消机制: 支持取消待执行的函数
  • ✅ 立即执行: 支持首次立即执行选项

基本用法 ​

typescript
import useDebounceFn from "./useDebounceFn";

function SearchComponent() {
  const debouncedSearch = useDebounceFn(
    (query: string) => {
      // 执行搜索 API 调用
      searchAPI(query);
    },
    { wait: 500 }
  );

  return (
    <input
      onChange={(e) => debouncedSearch(e.target.value)}
      placeholder="输入搜索关键词"
    />
  );
}

兼容性 ​

  • ✅ React 16.8+
  • ✅ TypeScript 4.0+
  • ✅ 现代浏览器

实现源码 ​

查看 useDebounceFn 的实现
tsx
import { useLatest, useUnmount, useCreation } from "ahooks";
import debounce from "lodash/debounce";

type noop = (...args: any[]) => any;

export interface DebounceOptions {
  wait?: number;
  leading?: boolean;
  trailing?: boolean;
  maxWait?: number;
}

const useDebounceFn = <T extends noop>(fn: T, options: DebounceOptions) => {
  const fnRef = useLatest(fn);

  const debounced = useCreation(() => {
    return debounce(
      (...args: Parameters<T>): ReturnType<T> => fnRef.current(...args),
      options.wait ?? 100,
      options
    );
  }, []);

  useUnmount(() => {
    debounced.cancel();
  });

  return debounced;
};

export default useDebounceFn;

在实践中理解 React,在分享中共同成长。