Melhores Práticas de Rede
Um resumo condensado das 25 práticas de rede mais importantes extraídas de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 práticas de rede mais importantes extraídas de todas as páginas desta seção.
Centralize o HTTP em um único módulo cliente: Anexe URL base, cabeçalhos de autenticação, tempos limite e verificações de HTTPS em api/client.ts - recursos nunca espalham fetch bruto para hosts arbitrários.
Imponha HTTPS em builds de produção: Rejeite http:// no ponto de estrangulamento do cliente - android.usesCleartextTraffic é apenas para desenvolvimento local.
Sempre defina tempos limite de requisição: Use AbortController + timer (leituras de 8–15 s, mais rigorosas para mutações) - handoffs de LTE ficam pendentes indefinidamente sem eles.
Cancele requisições em andamento ao desmontar: Passe signal da limpeza do useEffect ou queryFn do TanStack Query - evita setState após desmontar e desperdício de tempo de rádio.
Analise JSON na borda da rede com Zod: Nunca caste res.json() cegamente - um schema por endpoint captura desvios de backend antes que os usuários vejam falhas.
Classifique erros antes de exibir texto: Offline (TypeError), tempo limite (AbortError), status HTTP e falhas de análise precisam de mensagens diferentes - veja UX de Falha de Rede.
Use fetch como padrão no Hermes: Zero bytes extras no bundle - adicione axios apenas quando interceptadores, isAxiosError ou convenções de equipe justificarem ~13–15 KB gzip.
Implemente interceptadores uma vez: Seja um wrapper fetch ou axios, a anexação de autenticação e o tratamento de 401 residem em um único módulo emparelhado com Rotação de Token de Atualização.
Progresso de upload requer XMLHttpRequest ou FileSystem: Nem fetch nem axios expõem progresso de upload confiável no React Native - planeje XHR ou expo-file-system para avatares e mídia.
Adote TanStack Query para estado de servidor compartilhado: Substitua hooks useEffect manuais de fetch quando várias telas leem a mesma API - cache, deduplicação e re-fetch em segundo plano são gratuitos.
Conecte focusManager ao AppState: Re-fetch de queries desatualizadas quando o app se torna active - mobile não tem eventos de foco de window.
Conecte onlineManager ao NetInfo: Pause retentativas de query offline; retome ao reconectar - retentativas ilimitadas em modo avião drenam a bateria.
Ajuste staleTime por chave de query: 30–60 s para feeds, mais tempo para catálogos - staleTime: 0 global re-fetch muito agressivamente a cada primeiro plano.
Exiba rótulos de desatualização: Mostre dataUpdatedAt ou "Atualizado há 2 min" - usuários em LTE instável precisam saber que os dados podem estar desatualizados.
Retente GET com backoff exponencial e jitter: Limite a 3–4 tentativas - jitter evita picos sincronizados de clientes quando as torres se recuperam.
Nunca retente POST não idempotente cegamente: Use cabeçalhos Idempotency-Key e deduplicação do servidor para pagamentos e criações - veja Retentativas, Backoff e Idempotência.
Defina mutations.retry do TanStack Query como 0 por padrão: Retentativa na camada de transporte com chaves de idempotência estáveis supera invocações duplicadas da função de mutação.
Persista caches de leitura seletivamente: persistQueryClient com AsyncStorage ou MMKV para catálogos - limpe no logout; exclua PII não criptografado.
Feche WebSockets em segundo plano: Reconecte com backoff ao ir para o primeiro plano - deixar sockets abertos desperdiça bateria e é encerrado pelo sistema operacional.
Ofereça fallback de polling para recursos em tempo real: Intervalos mais lentos em celular e em segundo plano - ou notificações push para eventos que devem ser entregues.
Escolha urql para GraphQL enxuto; Apollo para grafos complexos: Meça o bundle com expo export - persista cache normalizado com limites de tamanho no dispositivo.
Use TLS do sistema por padrão; fixe apenas com um ADR: O pinning de certificado requer reconstruções nativas, runbooks de rotação e quebra proxies corporativos - a maioria dos apps não deve fixar no primeiro dia.
Fila mutações offline com UI otimista: Persista escritas falhadas, mostre estado pending, descarregue ao reconectar - emparelhe com UI Otimista.
Nunca bloqueie a thread da UI na análise de rede: Transformações de JSON grandes pertencem fora do caminho crítico; transmita ou pagine listas enormes - mantenha as interações responsivas.
Checklist de rede pré-lançamento: Dispositivo físico em LTE, comportamento de retentativa em modo avião, limpeza de cache no logout, verificação pontual de idempotência e busca por política TLS antes da submissão para a loja.
fetch com um wrapper cliente fino, a menos que interceptadores ou ergonomia de upload forcem axios. TanStack Query fica acima de qualquer transporte.
QueryClientProvider, focusManager + AppState, onlineManager + NetInfo, staleTime sensato e signal em queryFn.
Raro - finanças/saúde regulamentadas com operações de segurança responsáveis pela rotação. TLS do sistema por padrão conforme Pinning de Certificado e Regras de Segurança.
As páginas de rede cobrem transporte, cache e UX de falha. Offline-first completo adiciona sincronização SQLite - Noções Básicas de Offline-First.
Versões da Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026