慕妹3146593
2021-12-12 16:04:49
我有一個(gè)場(chǎng)景,我需要在輸入完成兩秒后調(diào)度一個(gè)動(dòng)作。(假設(shè)用戶在沒有 2 秒間隔的情況下輸入 1000,所以我只需要在輸入 1000 和 2 秒后調(diào)度操作)。以前我使用debounce-promise來做這樣的事情,我需要從 API 獲取下拉列表,但為此我直接在組件中使用了帶有 AJAX 調(diào)用的庫(kù)。它工作正?!,F(xiàn)在我需要分派這樣的動(dòng)作。 // 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); }現(xiàn)在動(dòng)作也只在完成輸入兩秒后調(diào)度。但是隨后它會(huì)發(fā)出 1、10、100、1000 的所有請(qǐng)求(即使 1000 是在沒有兩秒間隔的情況下輸入的)。如何在 2 秒內(nèi)修復(fù)此問題并僅針對(duì)最后一個(gè)輸入調(diào)度操作?任何幫助,將不勝感激。謝謝編輯:添加了基本的 onChange 功能
2 回答

紫衣仙女
TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
你可以做這樣的事情。
let timeOut = null;
SearchFilter: (name, value) => {
clearTimeout(timeOut);
dispatch(SearchFilter(name, value));
timeOut = setTimeout(() => {
dispatch(callfunction());
}, 2000);
}
它將調(diào)度等待 2 秒輸入的動(dòng)作。

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
您需要使用 loadash 的 debounce 方法并執(zhí)行以下操作:
onChange = debounce(anyInput => { }, 2000);
因此,您必須在完成輸入后 2 秒后在 onchange 方法中進(jìn)行 API 調(diào)用。不確定這是您要問的嗎?
添加回答
舉報(bào)
0/150
提交
取消