当前位置:首页 > React

React如何使用防抖

2026-01-24 10:17:30React

防抖的基本概念

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

使用Lodash实现防抖

Lodash库提供了现成的_.debounce方法,可直接在React组件中使用。

React如何使用防抖

安装Lodash:

React如何使用防抖

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:

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)需根据实际场景调整。

分享给朋友:

相关文章

react 如何使用 apply

react 如何使用 apply

使用 apply 方法的基本概念 在 JavaScript 中,apply 是函数原型上的方法,用于调用函数时指定 this 的值和传递参数数组。React 中可以使用 apply 来绑定组件方法或调…

react如何使用dispatch

react如何使用dispatch

使用 useDispatch 钩子 在函数组件中,通过 react-redux 提供的 useDispatch 钩子获取 dispatch 函数。引入 useDispatch 后直接调用即可:…

如何使用react native

如何使用react native

安装开发环境 确保系统已安装Node.js(建议LTS版本)。通过npm或yarn全局安装React Native命令行工具: npm install -g react-native-cli # 或…

react如何使用插槽

react如何使用插槽

使用props.children实现基础插槽 React中插槽的核心是通过props.children传递子组件。父组件在标签内部放置的内容会自动成为children属性: // 父组件 <C…

react redux如何使用

react redux如何使用

安装依赖 确保项目已安装 React 和 Redux 相关库。通过以下命令安装核心依赖: npm install redux react-redux @reduxjs/toolkit 创建 Stor…

react-router如何使用

react-router如何使用

React Router 的基本用法 安装 React Router 的依赖包: npm install react-router-dom 在应用中引入必要的组件: import { Browse…