当前位置:首页 > React

React如何使用防抖

2026-03-10 18:33:03React

防抖的基本概念

防抖(Debounce)是一种限制函数频繁调用的技术,确保函数在连续触发时只执行一次。常用于输入框搜索、窗口大小调整等场景。

使用 Lodash 实现防抖

Lodash 提供了现成的 _.debounce 方法,适合快速集成到 React 中。

安装 Lodash:

npm install lodash

在组件中使用:

import React, { useState } from 'react';
import { debounce } from 'lodash';

function SearchInput() {
  const [query, setQuery] = useState('');

  const handleSearch = debounce((value) => {
    console.log('Searching for:', value);
    // 实际搜索逻辑
  }, 500);

  const handleChange = (e) => {
    setQuery(e.target.value);
    handleSearch(e.target.value);
  };

  return <input value={query} onChange={handleChange} />;
}

自定义防抖 Hook

通过 useRefuseCallback 实现自定义防抖逻辑:

import React, { useState, useRef, useCallback } from 'react';

function useDebounce(callback, delay) {
  const timerRef = useRef();

  return useCallback(
    (...args) => {
      clearTimeout(timerRef.current);
      timerRef.current = setTimeout(() => callback(...args), delay);
    },
    [callback, delay]
  );
}

function SearchInput() {
  const [query, setQuery] = useState('');

  const handleSearch = (value) => {
    console.log('Searching for:', value);
  };

  const debouncedSearch = useDebounce(handleSearch, 500);

  const handleChange = (e) => {
    setQuery(e.target.value);
    debouncedSearch(e.target.value);
  };

  return <input value={query} onChange={handleChange} />;
}

注意事项

  • 清理定时器:在组件卸载时清除防抖的定时器,避免内存泄漏。
    useEffect(() => {
      return () => clearTimeout(timerRef.current);
    }, []);
  • 依赖项处理:若防抖函数依赖外部变量,需将其加入 useCallback 的依赖数组。

性能优化场景

防抖适用于高频触发但只需最终结果的场景,如:

React如何使用防抖

  • 输入框实时搜索
  • 滚动事件处理
  • 窗口大小调整事件

通过合理设置延迟时间(如 300-500ms),平衡响应速度与性能。

分享给朋友:

相关文章

java如何使用

java如何使用

Java 基本使用方法 Java 是一种广泛使用的编程语言,适用于开发各种类型的应用程序。以下是 Java 的基本使用方法,包括环境配置、语法基础和常用操作。 安装 Java 开发环境 下载并安装…

react refs如何使用

react refs如何使用

React Refs 的基本概念 Refs 提供了一种直接访问 DOM 节点或 React 组件实例的方式。通常在需要直接操作 DOM 或访问组件方法时使用。 创建 Refs 使用 React.cr…

vue的防抖实现

vue的防抖实现

Vue 防抖实现方法 在Vue中实现防抖(debounce)可以通过以下几种方式完成: 使用Lodash库的debounce方法 安装Lodash: npm install lodash…

vue如何实现防抖

vue如何实现防抖

Vue 防抖的实现方法 在Vue中实现防抖(debounce)可以通过以下几种方式,根据不同的使用场景选择合适的方法。 使用 Lodash 的 debounce 函数 Lodash 是一个流行的 J…

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…

react 如何使用axios

react 如何使用axios

安装 axios 在 React 项目中安装 axios 依赖包: npm install axios # 或 yarn add axios 引入 axios 在需要发送 HTTP 请求的组件或文件…