当前位置:首页 > React

React如何使用防抖

2026-01-24 10:17:30React

防抖的基本概念

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

使用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

若不依赖Lodash,可通过useRefuseCallback实现自定义防抖Hook:

React如何使用防抖

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

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

  return useCallback(
    (...args) => {
      clearTimeout(timeoutRef.current);
      timeoutRef.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(timeoutRef.current);
    }, []);
  • 依赖项处理:若防抖函数依赖外部变量(如状态),需将其加入useCallback的依赖数组。

性能优化

对于频繁触发的事件(如滚动、输入),防抖可显著减少不必要的渲染或API调用。延迟时间(如500ms)需根据实际场景调整。

分享给朋友:

相关文章

vue防抖函数实现

vue防抖函数实现

防抖函数原理 防抖(Debounce)是一种限制函数频繁调用的技术,在事件被触发后延迟执行,若在延迟时间内再次触发,则重新计时。适用于输入框搜索、窗口大小调整等场景。 Vue 中实现防抖的三种方式…

vue项目实现防抖

vue项目实现防抖

Vue 项目中实现防抖的方法 防抖(Debounce)是一种限制函数频繁调用的技术,确保函数在最后一次调用后的一段时间内不再被触发。以下是几种在 Vue 项目中实现防抖的方法: 使用 Lodash…

react如何使用echarts

react如何使用echarts

安装 ECharts 和 React 适配库 在 React 项目中使用 ECharts 需要安装 ECharts 核心库及其 React 适配库。通过 npm 或 yarn 安装: npm ins…

react如何使用jquery

react如何使用jquery

在 React 中使用 jQuery React 和 jQuery 的设计理念不同,React 基于虚拟 DOM 和数据驱动,而 jQuery 直接操作真实 DOM。若需在 React 中整合 jQu…

react如何使用图片

react如何使用图片

在React中使用图片的方法 静态图片导入 在React组件中可以直接通过import导入图片文件,这种方式适用于已知的静态资源。导入后,图片会被处理为模块,可通过src属性引用。 import R…

react中如何使用echarts

react中如何使用echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库。使用 npm 或 yarn 安装: npm install echarts echarts-fo…