- 컴포넌트에서 요청을 보내고, 재랜더링 된 컴포넌트가 다시 요청을 보냈을 때, 응답 순서의 오류 가능성
- 해결 방법
- 요청마다 고유 ID 비교 (클로저 속성활용, ref)
- AbortController 활용
-
useEffect(() => {
const controller = new AbortController();
fetch(`/api/search?q=${query}`, { signal: controller.signal })
.then(res => res.json())
.then(result => {
if (!controller.signal.aborted) {
setData(data);
}
})
.catch(err => {
if (err.name === 'AbortError') {
console.log('요청 취소됨');
} else {
console.error(err);
}
});
return () => controller.abort(); // 이전 요청 취소
}, [query]);
- swr, react-query 라이브러리 활용