欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > React 中结合 antd 的 Input 组件实现防抖输入

React 中结合 antd 的 Input 组件实现防抖输入

2025/2/25 21:51:25 来源:https://blog.csdn.net/WithCYwind/article/details/144911199  浏览:    关键词:React 中结合 antd 的 Input 组件实现防抖输入

在 React 中结合 antd 的 Input 组件实现防抖输入,可以通过以下几种方式实现:

1. 使用 useEffect 和 setTimeout

代码示例

import React, { useState, useEffect } from "react";
import { Input } from "antd";const DebouncedInput = () => {const [inputValue, setInputValue] = useState(""); // 即时输入值const [debouncedValue, setDebouncedValue] = useState(""); // 防抖后的值useEffect(() => {const timer = setTimeout(() => {setDebouncedValue(inputValue);}, 500); // 防抖延迟时间return () => {clearTimeout(timer); // 清除上一次的计时器};}, [inputValue]);return (<div><Inputplaceholder="输入文字试试"value={inputValue}onChange={(e) => setInputValue(e.target.value)}style={{ width: 300 }}/><p>即时输入值: {inputValue}</p><p>防抖值: {debouncedValue}</p></div>);
};export default DebouncedInput;

2. 使用 Lodash 的 debounce

安装 Lodash

npm install lodash

代码示例

import React, { useState, useCallback } from "react";
import { Input } from "antd";
import _ from "lodash";const DebouncedInput = () => {const [inputValue, setInputValue] = useState("");// 使用 useCallback 包装防抖函数const handleDebouncedChange = useCallback(_.debounce((value) => {console.log("防抖输入值: ", value);}, 500),[]);const handleChange = (e) => {const value = e.target.value;setInputValue(value);handleDebouncedChange(value); // 调用防抖函数};return (<div><Inputplaceholder="输入文字试试"value={inputValue}onChange={handleChange}style={{ width: 300 }}/></div>);
};export default DebouncedInput;

3. 使用自定义 Hook

创建 useDebounce Hook

import { useState, useEffect } from "react";export const useDebounce = (value, delay) => {const [debouncedValue, setDebouncedValue] = useState(value);useEffect(() => {const timer = setTimeout(() => {setDebouncedValue(value);}, delay);return () => {clearTimeout(timer);};}, [value, delay]);return debouncedValue;
};

代码示例

import React, { useState } from "react";
import { Input } from "antd";
import { useDebounce } from "./useDebounce";const DebouncedInput = () => {const [inputValue, setInputValue] = useState("");const debouncedValue = useDebounce(inputValue, 500); // 延迟 500msreturn (<div><Inputplaceholder="输入文字试试"value={inputValue}onChange={(e) => setInputValue(e.target.value)}style={{ width: 300 }}/><p>即时输入值: {inputValue}</p><p>防抖值: {debouncedValue}</p></div>);
};export default DebouncedInput;

4. 优化 Antd 的 Input 组件

Antd 的 Input 支持 onChange,可以直接配合上面任意一种防抖实现方法。以下是一个完整示例,结合 useDebounce:

import React, { useState } from "react";
import { Input } from "antd";
import { useDebounce } from "./useDebounce";const DebouncedInput = () => {const [inputValue, setInputValue] = useState("");const debouncedValue = useDebounce(inputValue, 500);const handleInputChange = (e) => {setInputValue(e.target.value);};return (<div><Inputplaceholder="输入文字试试"value={inputValue}onChange={handleInputChange}style={{ width: 300 }}/><p>即时输入值: {inputValue}</p><p>防抖值: {debouncedValue}</p></div>);
};export default DebouncedInput;

总结

直接实现防抖:用 useEffect 和 setTimeout。
使用第三方库:Lodash 的 debounce 是非常方便的解决方案。
封装 Hook:自定义 useDebounce 可以复用,适合更复杂的项目。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词