Cuando hacemos una petición a una API, podemos cancelarla para evitar que se ejecute cuando el componente se desmonte usando AbortController
como hacemos en este ejemplo:
useEffect(() => {
// Creamos el controlador para abortar la petición
const controller = new AbortController()
// Recuperamos la señal del controlador
const { signal } = controller
// Hacemos la petición a la API y le pasamos como options la señal
fetch('https://jsonplaceholder.typicode.com/posts/1', { signal })
.then(res => res.json())
.then(json => setMessage(json.title))
.catch(error => {
// Si hemos cancelado la petición, la promesa se rechaza
// con un error de tipo AbortError
if (error.name !== 'AbortError') {
console.error(error.message)
}
})
// Si se desmonta el componente, abortamos la petición
return () => controller.abort()
}, [])
Esto también funciona con axios
:
useEffect(() => {
// Creamos el controlador para abortar la petición
const controller = new AbortController()
// Recuperamos la señal del controlador
const { signal } = controller
// Hacemos la petición a la API y le pasamos como options la señal
axios
.get('https://jsonplaceholder.typicode.com/posts/1', { signal })
.then(res => setMessage(res.data.title))
.catch(error => {
// Si hemos cancelado la petición, la promesa se rechaza
// con un error de tipo AbortError
if (error.name !== 'AbortError') {
console.error(error.message)
}
})
// Si se desmonta el componente, abortamos la petición
return () => controller.abort()
}, [])