Skip to content

Instantly share code, notes, and snippets.

@jwchang0206
Created January 4, 2021 05:59
Show Gist options
  • Save jwchang0206/93a15ee1ea562beb5571a9fd1d75b1f9 to your computer and use it in GitHub Desktop.
Save jwchang0206/93a15ee1ea562beb5571a9fd1d75b1f9 to your computer and use it in GitHub Desktop.
import { useCallback, useEffect, useRef } from 'react';
import axios, { Canceler } from 'axios';
export const useCancelTokens = () => {
const cancelTokens = useRef<Canceler[]>([]);
// Add a cancel token in this hooks and return a generated token
const addCancelToken = useCallback(() => {
const { cancel, token } = axios.CancelToken.source();
cancelTokens.current.push(cancel);
return token;
}, []);
// Cancel all requests
const cancelAll = useCallback(() => {
cancelTokens.current.forEach((canceler) => canceler());
});
useEffect(() => {
// Cancel all requests on unmount cycle
return () => {
cancelAll();
};
}, []);
return {
cancelTokens,
addCancelToken,
cancelAll,
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment