【发布时间】:2020-09-07 15:12:53
【问题描述】:
使用 React 并尝试从我的文本输入值更改中消除函数调用。
我有一个文本输入,每次inputValue 更改useEffect 都会被触发,并且正在使用输入的值从 API 获取数据:
useEffect(() => {
console.log('useEffect');
fetchDataFromAPI();
}, [inputValue]);
我希望对fetchDataFromAPI 进行去抖并清除所有尾随的去抖调用。
到目前为止我尝试的是:
const debounce = (func, wait, immediate) => {
let timeout;
return function executedFunction() {
var context = this;
var args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
console.log('clearTimeout');
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
const AsyncComponent = ({
value,
}) => {
const [inputValue, setInputValue] = useState('');
const fetchOptions = async () => console.log('fetchOptions');
const debouncedFetch = debounce(() => fetchOptions(), 1000);
useEffect(() => {
console.log('useEffect');
debouncedFetch();
}, [inputValue]);
return (
<Autocomplete
value={value}
/>
);
};
然而,这段代码的作用是它不会取消尾随的函数调用。 API调用去抖动1000ms,但API调用的数量与inputValue的变化相同。
输入四个字母的结果:
【问题讨论】:
标签: javascript reactjs