亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何延遲調度動作(去抖動)

如何延遲調度動作(去抖動)

慕妹3146593 2021-12-12 16:04:49
我有一個場景,我需要在輸入完成兩秒后調度一個動作。(假設用戶在沒有 2 秒間隔的情況下輸入 1000,所以我只需要在輸入 1000 和 2 秒后調度操作)。以前我使用debounce-promise來做這樣的事情,我需要從 API 獲取下拉列表,但為此我直接在組件中使用了帶有 AJAX 調用的庫。它工作正常?,F在我需要分派這樣的動作。  // 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 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號