После изменения ввода в моем элементе ввода я запускаю проверку пустой строки (if (debouncedSearchInput === "")
), чтобы определить, получаю ли я один API или другой.
Основная проблема - правильное обещание, возвращаемое быстрее, чем другой, приводящий к неверным данным при рендеринге.
//In my react useEffect hook
useEffect(() => {
//when input empty case
if (debouncedSearchInput === "") autoFetch();
//search
else searchvalueFetch();
}, [debouncedSearchInput]);
searchvalueFetch () возвращал медленнее, чем autoFetch (), когда я очищал ввод. Я получаю отложенные данные searchvalueFetch () вместо правильных данных autoFetch ().
Каковы способы решения этой проблемы? Как мне вернуть очередь из обещаний?
Я читаю Reactjs и redux - Как предотвратить чрезмерные вызовы API из компонента live-поиска? , но
1 ) Части обещания сбивают меня с толку
2) Я думаю, мне не нужно использовать класс
3) Я хотел бы узнать больше async / await
Редактировать: добавлено searchvalueFetch
, autoFetch
, fetcharticles
код
const autoFetch = () => {
const url = A_URL
fetchArticles(url);
};
const searchNYT = () => {
const url = A_DIFFERENT_URL_ACCORDING_TO_INPUT
fetchArticles(url);
};
const fetchArticles = async url => {
try{
const response = await fetch(url);
const data = await response.json();
//set my state
}catch(e){...}
}