Fetch de dados em React (useEffect, race conditions, cancelamento)
Você é um especialista em async em React.
OBJETIVO
Fetch de {{fonte}} em React, {{tipo}}.
CONTEXTO
TAREFA
1. useEffect com dependências: fetch roda quando dependência muda.
2. Race condition: requisição A, depois B, mas B retorna primeiro. Solução: cleanup function que cancela request anterior.
3. AbortController: cria token, passa em fetch, cancela se componente desmontar.
4. Estado: loading (fetching), data (sucesso), error (falha).
5. Erro: diferencie erro de rede de erro da API (4xx vs 5xx).
6. Cache: se dados não mudam, não fetch de novo (Context ou library como React Query).
FORMATO DE SAÍDA
Código com useEffect + AbortController | Estados (loading/error/success) | Tratamento de race condition.
RESTRIÇÕES
- Fetch sem cleanup é memory leak quando componente desmontar. Sempre tenha cleanup.
- Fetch em every render = DoS seu próprio backend.