useEffect API 호출(데이터 가져오기)에서 setTimeOut.
7170 단어 reactprogrammingwebdevjavascript
이 기사에서는 useEffect 후크 작동 방식을 이해하고 있다고 가정합니다. 그렇지 않은 경우 반응 문서를 방문하십시오.
시작할까요?
setTimeout
setTimeout은 다른 함수 또는 임의의 코드 스니펫을 가져와서 지정된 시간(밀리초) 후에 실행하는 자바스크립트 함수입니다.
setTimeout(
console.log('You will get this in five seconds egghead.'),
5000)
setTimeout 함수는 코드 실행 5초 후에 console.log() 함수를 실행합니다.
setTimeout(
function Add(a, b){
return 4+7;
},
3000)
여기에서 setTimeout 함수가 다른 함수를 사용할 수 있음을 알 수 있습니다. 이 경우 setTimeout 함수 내의 Add 함수는 코드 실행 후 3초 후에 실행됩니다.
그것은 setTimeout 함수가 어떻게 작동하는지 아주 많이 설명해야 합니다. 이제 useEffect로 데이터 가져오기에 어떻게 사용할 수 있는지 살펴보겠습니다.
UseEffect에서 데이터 가져오기
useEffect(() => {
const fetchData = async () => {
await fetch(`https://api.github.com/users/${input}`)
.then((res) => res.json())
.then((res) => setData([res]))
.catch((e) => console.error(e));
};
fetchData();
}, [input]);
위의 코드에서 볼 수 있듯이 사용자가 입력한 내용에 따라 github API에 요청이 전송됩니다. 하지만 API에 데이터를 요청하는 방식은 사용자가 검색값을 입력한다는 점에서 문제가 있다. 보여드리겠습니다!
위의 이미지를 잘 보면 네트워크에서 키를 누를 때마다 API에 대한 요청이 있는 것을 볼 수 있는데 이는 좋지 않습니다. 여러 요청이 API로 전송되고 있고 여러 응답도 있기 때문에 좋지 않습니다. 이는 모든 상태 변경에서 실행되는 useEffect 함수로 인해 발생합니다. 키누름이 있을 때마다 상태가 변경되고 상태가 변경될 때마다 useEffect가 실행된다는 점을 기억하십시오. 따라서 키보드를 누를 때마다 API에 대한 요청이 이루어집니다.
이 방법의 다른 두 가지 문제는 다음과 같습니다.
글쎄, 우리는 분명히 그것을 원하지 않으므로 setTimeout을 사용하여 다중 요청 문제를 해결할 것입니다. 갑시다!
해결책
여러 개의 불필요한 요청 문제에 대한 해결책은 매우 간단합니다. setTimeout 함수에서 fetchData 함수를 래핑하여 이 문제를 해결할 수 있습니다.
useEffect(() => {
const fetchData = async () => {
await fetch(`https://api.github.com/users/${input}`)
.then((res) => res.json())
.then((res) => setData([res]))
.catch((e) => console.error(e));
};
const timer = setTimeout(() => {
fetchData();
}, 5000);
return () => clearTimeout(timer);
}, [input]);
위의 코드에서 setTimeout 함수는 키를 누를 때마다 5초 동안 API에 전달되었을 모든 형태의 요청을 지연시킵니다. 이것은 사용자가 검색 값을 완전히 입력할 수 있는 충분한 시간을 제공합니다. 키를 누르지 않고 5초 후에 요청이 이루어집니다. 키를 누를 때마다 API에 여러 요청을 보내지 않기 때문에 실제로 더 좋습니다.
setTimeout을 사용하면 API에 대해 하나의 요청만 생성되고 하나의 정확한 응답만 얻는다는 것을 알 수 있습니다. 이 간단한 방법은 관련 없는 여러 요청으로 네트워크에 과부하를 주지 않기 때문에 앱의 속도와 성능도 향상시킬 수 있습니다.
그렇게 말하면 불필요한 요청과 응답을 피하기 위해 요청에 입력 값이 포함될 때 다음 API 호출에서 setTimeout을 사용할 것이라고 믿고 싶습니다. 행운을 빕니다!
Reference
이 문제에 관하여(useEffect API 호출(데이터 가져오기)에서 setTimeOut.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/reenydavidson/settimeout-in-useeffect-api-call-data-fetching-j33텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)