웹사이트에서 버튼 클릭이나 특정 동작 후 로딩 화면이 표시되고,
검색 중에는 '검색 취소' 버튼을 제공하는 경우가 많은 데,
그런 기능은 어떻게 구현할 수 있을까?를 고민하다 2가지 방법을 알게 되었습니다.
1. CancelToken 사용하기
1️⃣ axios.CancelToken.source()를 사용하여 취소 토큰을 생성한다.
2️⃣ API 요청을 보낼 때 cancelToken 옵션에 토큰을 삽입한다.
3️⃣ 해당 요청을 취소할 때 source.cancel()를 호출한다.
import axios from 'axios';
// CancelToken 생성
const source = axios.CancelToken.source();
axios.get('/api/endpoint', {
cancelToken: source.token
})
.then(response => {
console.log('응답 데이터:', response.data);
})
.catch(error => {
if (axios.isCancel(error)) {
console.log('요청이 취소되었습니다:', error.message);
} else {
console.error('API 요청 오류:', error);
}
});
// 요청 취소
source.cancel('사용자가 요청을 취소했습니다.');
2. AbortController 사용하기
※ Axios 0.22.0 이상에서는 AbortController 사용을 권장합니다. (Fetch API와 함께 사용되며 Axios와 호환됩니다.)
1️⃣ AbortController 인스턴스를 생성하여 취소 토큰을 생성한다.
2️⃣ AbortController 인스턴스에서 생성된 signal을 객체를 API 요청 시 삽입한다.
3️⃣ 해당 요청을 취소할 때 controller.abort()를 호출한다.
import axios from 'axios';
// AbortController 생성
const controller = new AbortController();
const { signal } = controller;
axios.get('/api/endpoint', {
signal
})
.then(response => {
console.log('응답 데이터:', response.data);
})
.catch(error => {
if (error.name === 'AbortError') {
console.log('요청이 취소되었습니다.');
} else {
console.error('API 요청 오류:', error);
}
});
// 요청 취소
controller.abort();
이 두 가지 방법을 통해 네트워크 요청을 더 효율적으로 관리하고, 불필요한 요청이나 사용자가 요청을 취소하는 경우 시스템의 성능을 유지할 수 있습니다!
'더 알아보기 > 개념' 카테고리의 다른 글
Axios의 timeout 옵션으로 요청 시간 제한 설정하기 (0) | 2024.08.28 |
---|---|
TanStack Query (0) | 2024.08.12 |
[Postman] WebSocket Mock Server 사용법 (0) | 2024.05.21 |
react-dom의 createPortal 사용 후기 (0) | 2023.07.28 |
MVC 패턴 (1) | 2023.03.27 |
댓글