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

相关推荐
Ken_11151 小时前
小体积附件下载正常,大附件下载异常
javascript
变与不变8062 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半2 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck2 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.2 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子2 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常2 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常2 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋3 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发4 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos