当前位置:首页 > 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)}
    />
  );
}

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

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

react实现防抖

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 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…

如何构建react

如何构建react

构建 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过命令行验证: node -v npm -v 使用 Create React Ap…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…

如何升级react native

如何升级react native

升级 React Native 的步骤 检查当前版本 运行以下命令查看当前项目的 React Native 版本: react-native --version 更新 React Native CL…

如何使用 react native

如何使用 react native

安装开发环境 确保已安装 Node.js(建议使用 LTS 版本)。通过以下命令安装 React Native 命令行工具: npm install -g expo-cli 或使用 Yarn: y…