Three-State Fetching Busca de Dados em Três Estados

Última atualização: 2026-11-03

Three-State Fetching Busca de Dados em Três Estados

Toda requisição de dados tem três estados: loading enquanto está em andamento, success quando os dados chegam, e error quando falha. A UI deve preparar um quadro para cada um deles, e deixar faltar qualquer um produz tela em branco, espera infinita ou falha silenciosa. Este é o modelo mental compartilhado por código fetch escrito à mão e por toda biblioteca de requisições, então aprender uma vez vale em qualquer lugar.

GrupoDados e Engenharia
TipoPadrão

ℹ️ Informação O editor transpila JSX para JavaScript e renderiza a UI real na sandbox; os componentes são montados automaticamente — sem render manual.

📝 Sintaxe

const [state, setState] = useState({ status: 'loading', data: null, error: null })

useEffect(() => {
  fetch(url)
    .then(r => r.ok ? r.json() : Promise.reject(new Error('HTTP ' + r.status)))
    .then(data => setState({ status: 'success', data, error: null }))
    .catch(err => setState({ status: 'error', data: null, error: err }))
}, [url])

if (state.status === 'loading') return <p>Loading…</p>
if (state.status === 'error')   return <p>Error: {state.error.message}</p>
return <List data={state.data} />

⚙️ Parâmetros

statusO estado atual da máquina: 'loading' | 'success' | 'error'; você também pode expressá-lo com dois campos, isLoading e isError.

Retorna:Sem valor de retorno; trata-se de um padrão de codificação, não de uma API chamável.

▶ Exemplo

O exemplo roda direto: renderiza automaticamente ao expandir e edições valem na hora.

Saída:

A primeira requisição automática mostra "Carregando", uma resposta bem-sucedida revela o título do todo, e quando a rede ou a API falha você obtém a mensagem de erro junto com um botão de tentar novamente — um quadro para cada um dos três estados.

💡 Pontos-chave

⚠️ Aviso fetch não rejeita em um 404 ou 500 (apenas erros de nível de rede rejeitam), então sempre verifique r.ok e lance o erro você mesmo; caso contrário, erros de negócio escorrem silenciosamente para o branch de sucesso.
💡 Dica Mantenha o status dentro de um único objeto de estado em vez de três booleanos, o que elimina combinações ilegais como "loading é verdadeiro e error tem um valor".
ℹ️ Informação O TanStack Query incorpora essa máquina de estados na biblioteca (isPending, isError, data); escrever os três estados à mão é a melhor preparação para ele.
Mais casos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

P Posso usar três booleanos isLoading/isError/hasData em vez de um status?
R Pode, mas combinações ilegais ficam fáceis (dois deles verdadeiros ao mesmo tempo). Um único campo status é o jeito máquina de estados e toda combinação é válida por construção.
P Uma requisição falha deve tentar novamente automaticamente?
R Depende das regras de negócio: uma leitura pode tentar novamente duas ou três vezes com recuo exponencial, enquanto uma escrita deve ser confirmada por um humano para que nenhum pedido seja enviado duas vezes.
P A UI deve ser desabilitada durante o carregamento?
R Desabilite o botão de uma requisição de envio para evitar envios duplicados; uma leitura não precisa travar a tela inteira, uma tela de esqueleto mantém a página interativa.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%