Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/面试/八股/React/Hooks

useDebounce

1 分钟阅读 · Note

目录树 578 篇

              • 一、ref 本身是什么
              • 自定义Hooks
              • React Hooks 面试金句与原理
              • useContext
              • useDebounce
              • useForm
              • useHandler
              • useList
              • useLocalStorage
              • useMemo的安全数组
              • useQuery
              • useTheme
            • 定时器组件 &ref与state⌚️
            • 生命周期 ⌚️
            • React
            • React 组件卸载与 this引用
          • 进阶篇题目列表
          • DOM&浏览器 API
          • HTTP&网络
          • TS
          • Vue
        • 可投递企业
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗一、ref 本身是什么同一路径↗自定义Hooks同一路径↗React Hooks 面试金句与原理同一路径↗useContext同一路径↗useForm同一路径↗useHandler同一路径
  • useDebounce

useDebounce

> Last Format Time:6/15/2026 10:50:12

useDebounce


code

import { useState, useEffect } from 'react';

function useDebounce(value, delay = 500) {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    // 1. 设置定时器,在 delay 毫秒后更新防抖值
    const timer = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    // 2. 清理函数:如果在 delay 之前有新值输入,取消之前的定时器
    // 这是防抖的核心机制
    return () => {
      clearTimeout(timer);
    };
  }, [value, delay]); // 依赖原始值和延迟时间

  return debouncedValue;
}

使用

function SearchInput() {
  const [query, setQuery] = useState('');
  // 延迟 500ms 更新
  const debouncedQuery = useDebounce(query, 500); 

  useEffect(() => {
    if (debouncedQuery.trim()) {
      console.log('发起搜索请求:', debouncedQuery);
      // 在这里执行 fetch 请求...
    }
  }, [debouncedQuery]); // 注意:依赖的是防抖后的值

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