React搜索框组件

题目要求

实现一个search input组件,用户输入任意内容后自动触发关键词api搜索需求:搜索不频繁触发,结果响应及时

解答

下面仅给出React中防抖的实现,竞态请求的问题可以使用AbortController

javascript 复制代码
import { useState, useRef, useCallback, useEffect } from "react";

const fetchApi = (input) => {
  console.log(`fetch ${input}...`);
};

const useDebounce = function (fun, timeout) {
  const timerRef = useRef(null);
  const funRef = useRef(fun);
  funRef.current = fun;

  return useCallback(
    function (...args) {
      clearTimeout(timerRef.current);
      timerRef.current = setTimeout(() => {
        funRef.current.apply(this, args);
      }, timeout);
    },
    [timeout]
  );
};

export default function SearchInput() {
  const [value, setValue] = useState("");

  const search = useDebounce(fetchApi, 1000);

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

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

codesandbox链接:https://codesandbox.io/p/sandbox/ftgm5k

相关推荐
前端snow22 分钟前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上43 分钟前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
এ慕ོ冬℘゜1 小时前
navigator 导航对象 BOM制作方法
javascript
星栈1 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香1 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest1 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士3 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见3 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain
kyriewen3 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试
计算机魔术师3 小时前
700吉瓦「幽灵用电」:美国AI数据中心的抢电闹剧正在失控
前端