为了账号安全,请及时绑定邮箱和手机立即绑定

如何延迟调度动作(去抖动)

如何延迟调度动作(去抖动)

慕妹3146593 2021-12-12 16:04:49
我有一个场景,我需要在输入完成两秒后调度一个动作。(假设用户在没有 2 秒间隔的情况下输入 1000,所以我只需要在输入 1000 和 2 秒后调度操作)。以前我使用debounce-promise来做这样的事情,我需要从 API 获取下拉列表,但为此我直接在组件中使用了带有 AJAX 调用的库。它工作正常。现在我需要分派这样的动作。  // should be dispatched only for the last request  const getRateReq = dispatch(getRates());  const getRate = debounce(getRateReq, 2000, {    leading: false,  });  const onChange = (e) => {     setValue(e.target.value);     getRate(e.target.value);  }现在动作也只在完成输入两秒后调度。但是随后它会发出 1、10、100、1000 的所有请求(即使 1000 是在没有两秒间隔的情况下输入的)。如何在 2 秒内修复此问题并仅针对最后一个输入调度操作?任何帮助,将不胜感激。谢谢编辑:添加了基本的 onChange 功能
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

你可以做这样的事情。


let timeOut = null;

SearchFilter: (name, value) => {

    clearTimeout(timeOut);

    dispatch(SearchFilter(name, value));

    timeOut = setTimeout(() => {

            dispatch(callfunction());

        }, 2000);

    }

它将调度等待 2 秒输入的动作。


查看完整回答
反对 回复 2021-12-12
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您需要使用 loadash 的 debounce 方法并执行以下操作:

onChange = debounce(anyInput => {
    }, 2000);

因此,您必须在完成输入后 2 秒后在 onchange 方法中进行 API 调用。不确定这是您要问的吗?


查看完整回答
反对 回复 2021-12-12
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号