Skip to content

useDebounce ​

一个用于对值进行防抖处理的 React Hook,在值频繁变化时延迟更新,提高性能。

功能特性 ​

  • ✅ 值防抖: 对频繁变化的值进行防抖处理
  • ✅ 可配置延迟: 自定义防抖延迟时间
  • ✅ 类型安全: 完整的 TypeScript 类型支持
  • ✅ 性能优化: 减少不必要的渲染和计算
  • ✅ 灵活配置: 支持多种防抖选项

基本用法 ​

typescript
import useDebounce from "./useDebounce";

function SearchComponent() {
  const [searchTerm, setSearchTerm] = useState("");
  const debouncedSearchTerm = useDebounce(searchTerm, { wait: 500 });

  useEffect(() => {
    if (debouncedSearchTerm) {
      // 执行搜索
      performSearch(debouncedSearchTerm);
    }
  }, [debouncedSearchTerm]);

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

API 参考 ​

useDebounce(value, options) ​

参数 ​

参数类型描述
valueT需要防抖的值
optionsDebounceOptions防抖配置选项

返回值 ​

类型描述
T防抖后的值

使用场景 ​

搜索输入防抖 ​

typescript
function SearchInput() {
  const [query, setQuery] = useState("");
  const debouncedQuery = useDebounce(query, { wait: 300 });

  useEffect(() => {
    if (debouncedQuery) {
      // API 调用
      searchAPI(debouncedQuery);
    }
  }, [debouncedQuery]);

  return (
    <input
      value={query}
      onChange={(e) => setQuery(e.target.value)}
      placeholder="搜索..."
    />
  );
}

兼容性 ​

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

实现源码 ​

查看 useDebounce 的实现
tsx
import { useSafeState, useCreation } from "ahooks";
import useDebounceFn from "../useDebounceFn";
import type { DebounceOptions } from "../useDebounceFn";

const useDebounce = <T>(value: T, options: DebounceOptions) => {
  const [debounced, setDebounced] = useSafeState(value);

  const run = useDebounceFn(() => {
    setDebounced(value);
  }, options);

  useCreation(() => {
    run();
  }, [value]);

  return debounced;
};

export default useDebounce;

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