当前位置:首页 > 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),平衡响应速度与性能。

分享给朋友:

相关文章

如何使用ink react

如何使用ink react

安装 Ink 和 React 在项目目录下运行以下命令安装 Ink 和 React 的依赖: npm install ink react 创建基础组件 创建一个简单的 Ink 组件,例如 Hello…

react如何使用redux

react如何使用redux

使用 Redux 在 React 中的应用 Redux 是一个状态管理库,通常与 React 结合使用以管理全局状态。以下是具体实现步骤: 安装依赖 确保项目中已安装 redux 和 react-r…

vue项目实现防抖

vue项目实现防抖

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

react激光如何使用

react激光如何使用

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

react如何使用echarts

react如何使用echarts

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

react如何使用axios

react如何使用axios

安装 Axios 在 React 项目中安装 Axios,可以通过 npm 或 yarn 进行安装: npm install axios 或 yarn add axios 导入 Axios 在需要…