AbortController: gerenciando memória de forma eficiente no React
Como usar AbortController para cancelar requisições fetch e evitar vazamentos de memória em componentes React.

Em aplicações React modernas é essencial gerenciar memória de forma eficiente para garantir uma boa performance. Um problema comum que devs enfrentam são memory leaks que ocorrem durante operações assíncronas de fetch.
O AbortController é um utilitário poderoso que ajuda a mitigar esses vazamentos.
O problema
Quando um componente faz uma requisição assíncrona e é desmontado antes da resposta chegar, o setState da promessa que ainda está rodando pode causar erros e segurar referências em memória. Resultado: memory leak e warnings no console.
A solução: AbortController
O AbortController permite cancelar requisições fetch em andamento. Combinado com o cleanup do useEffect, você cancela a requisição quando o componente desmonta.
import React, { useState, useEffect } from 'react';
const FetchDataComponent = () => {
const [data, setData] = useState(null);
useEffect(() => {
const controller = new AbortController();
const signal = controller.signal;
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data', { signal });
const data = await response.json();
if (!signal.aborted) {
setData(data);
}
} catch (error) {
if (error.name !== 'AbortError') {
console.error('Fetch error:', error);
}
}
};
fetchData();
return () => {
controller.abort();
};
}, []);
return (
<div>
{data ? <pre>{JSON.stringify(data, null, 2)}</pre> : 'Loading...'}
</div>
);
};
Como funciona
- Criamos uma instância de
AbortControllere pegamos seusignal. - Passamos o
signalpara ofetchvia segundo argumento. - No cleanup do
useEffect, chamamoscontroller.abort(). - O
fetché interrompido, lançando umAbortErrorque tratamos nocatch.
Conclusão
Incorporar o AbortController no seu projeto React ajuda a gerenciar operações assíncronas com eficiência, evitar memory leaks e garantir uma experiência mais estável para o usuário.
Saiba mais na MDN — AbortController.
6 de maio de 2023 · Brazil