Condições de corrida e limpeza de efeitos
Use AbortController em useEffect para cancelar solicitações fetch obsoletas durante uma nova renderização.
Condições de corrida e limpeza de efeitos é uma aula grátis de React Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Boas-vindas
O que é uma condição de corrida?
O erro: resposta de busca desatualizada
useEffect(() => {
fetch('/api/item/' + id)
.then(r => r.json())
.then(data => setData(data)); // may run AFTER a newer fetch!
}, [id]);Correção 1: sinalizador de ignore
useEffect(() => {
let ignore = false;
fetch('/api/item/' + id)
.then(r => r.json())
.then(data => { if (!ignore) setData(data); });
return () => { ignore = true; };
}, [id]);Correção 2: AbortController
useEffect(() => {
const controller = new AbortController();
fetch('/api/item/' + id, { signal: controller.signal })
.then(r => r.json())
.then(data => setData(data))
.catch(err => {
if (err.name === 'AbortError') return; // expected
setError(err.message);
});
return () => controller.abort();
}, [id]);AbortController com funções assíncronas e await
useEffect(() => {
const ctrl = new AbortController();
async function load() {
try {
const res = await fetch('/api/' + id, { signal: ctrl.signal });
const json = await res.json();
setData(json);
} catch (e) {
if (e.name !== 'AbortError') setError(e.message);
}
}
load();
return () => ctrl.abort();
}, [id]);A limpeza é sempre necessária
A armadilha da assincronicidade de useEffect
useEffect(() => {
// useEffect callback is NOT async
async function fetchData() { /* ... */ }
fetchData(); // call it
return () => ctrl.abort();
}, [id]);As bibliotecas cuidam disso por você
Testando condições de corrida
Verificação rápida
Recapitulação
A seguir
Perguntas Frequentes
A aula “Condições de corrida e limpeza de efeitos” é grátis?
Sim — o texto completo de “Condições de corrida e limpeza de efeitos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Condições de corrida e limpeza de efeitos”?
Use AbortController em useEffect para cancelar solicitações fetch obsoletas durante uma nova renderização. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Condições de corrida e limpeza de efeitos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Condições de corrida e limpeza de efeitos
- useTransition para atualizações de interface não bloqueantes
- useDeferredValue para controlar a frequência de entradas
- Suspense para limites de dados e código