当前位置:首页 > React

react实现防抖

2026-01-27 08:37:09React

防抖的概念

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

实现方法一:使用 lodash

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

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 native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react中monent如何获取日期

react中monent如何获取日期

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

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以…