实现远程搜索框的延时搜索

383 阅读1分钟

需求背景

最近修改了这么一个需求。 有一个远程搜索商品的选择下拉框

image.png

使用antd自带的onSearch方法每次输入的时候都会调用一次接口,在打出要搜索的关键字的时候,有很多没有意义的请求

image.png

于是决定对调用onSearch作一个简单修改,使得用户打字结束后再进行搜索,减少无意义的请求

原版代码

const onSearch = value => {
    searchGoods({name: value}).then(res => {
      const result = res?.data ?? [];
      setGoods(result)
    });
};

修改后

let timeout;

const onSearch = value => {
  // 每次有输入,先清除上一个延时操作
  clearTimeout(timeout)
  timeout = setTimeout(() => {
    searchGoods({name: value}).then(res => {
      const result = res?.data ?? [];
      setGoods(result)
    });
  // 当用户停止输入500ms 后再去请求
  }, 500);
};

image.png

虽然不排除打字慢的依然会多请求几次,但是超过500ms就感觉太卡顿了