当前位置:首页 > React

react实现防抖

2026-01-27 08:37:09React

防抖的概念

防抖(Debounce)是一种优化高频触发事件的技术,确保事件在停止触发后的一段时间内只执行一次。适用于输入框搜索、窗口调整等场景。

react实现防抖

实现方法一:使用 lodash

安装 lodash 并直接调用其 debounce 方法:

react实现防抖

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

function SearchInput() {
  const [value, setValue] = useState('');

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

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

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

实现方法二:自定义 Hook

封装一个自定义的 useDebounce Hook,复用防抖逻辑:

import { useState, useEffect, useCallback } from 'react';

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

  useEffect(() => {
    const timer = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => clearTimeout(timer);
  }, [value, delay]);

  return debouncedValue;
}

function SearchInput() {
  const [inputValue, setInputValue] = useState('');
  const debouncedValue = useDebounce(inputValue, 500);

  useEffect(() => {
    if (debouncedValue) {
      console.log('Searching for:', debouncedValue);
      // 实际搜索逻辑
    }
  }, [debouncedValue]);

  return (
    <input
      value={inputValue}
      onChange={(e) => setInputValue(e.target.value)}
    />
  );
}

实现方法三:手动实现防抖函数

直接在组件内实现防抖逻辑:

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

function SearchInput() {
  const [value, setValue] = useState('');
  const debounceTimer = useRef(null);

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

  const handleChange = (e) => {
    const inputValue = e.target.value;
    setValue(inputValue);

    if (debounceTimer.current) {
      clearTimeout(debounceTimer.current);
    }
    debounceTimer.current = setTimeout(() => {
      handleSearch(inputValue);
    }, 500);
  };

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

注意事项

  • 清理定时器:在组件卸载时需清除防抖定时器(如方法三中的 useEffect 清理函数)。
  • 性能优化:防抖延迟时间(如 500ms)需根据实际场景调整。
  • Hook 依赖项:自定义 Hook 需正确处理依赖项以避免闭包问题。

标签: 防抖react
分享给朋友:

相关文章

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 在项目根目录的 package.json 文件中查看 dependencies 或 devDependencies 下的 react 和…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。 第二个音节…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…