Sobre
Turmas
Projetos
Time
Materiais
Artigos
Aulas
PT
EN
Materiais
Materiais
· Frontend
10. React (Intermediário)
20 min de leitura
→
Anterior
9. React Fundamentos
Próximo
11. Next.js
→
Nesta página
Objetivo da aula
Pré-requisitos
O que você será capaz de explicar ao final
10.1. O “degrau” intermediário no React: estado, efeitos e dados remotos
Relembrando o modelo mental: render → state/props → UI
O novo problema: sincronizar UI com “mundo externo”
Introduzindo: `useEffect` como “ponto de sincronização”
Introduzindo: Context como “distribuição de dados” sem prop drilling
10.2. useEffect (o hook de efeitos) — modelo mental certo
O que é “efeito”
Assinatura
Dependências: por que existem
Padrões comuns
1) Rodar “uma vez” (deps vazias)
2) Rodar quando algo muda (deps específicas)
Cleanup: por que existe
Exemplo mínimo: `document.title`
Exemplo mínimo: timer com cleanup (`setInterval`)
Armadilhas clássicas (com honestidade)
Loop infinito por deps erradas
Depender de função/objeto instável
“Desligar” o lint e criar bug
10.3. Consumo de APIs no React (fetch + useEffect)
Modelo mental (o ciclo completo)
Por que não chamar `fetch` no corpo do componente
Tipagem com TypeScript: defina o tipo do payload
Status HTTP vs erro de rede
Exemplo mínimo “padrão de mercado”: service separado + componente com `data/loading/error`
`services/usersService.ts`
`types/user.ts`
`screens/UsersList.tsx`
Cancelamento (noção): `AbortController`
10.4. Loading e erro (estados de UI “de verdade”)
A tríade de estados
Estados adicionais úteis
Boas práticas (mundo real)
Skeleton vs spinner (conceito)
Erro com ação (tentar novamente)
10.5. useContext (compartilhar dados sem prop drilling)
Problema: prop drilling
O que é Context
As partes do Context
Tipagem com TS: default `null` e padrão de custom hook
`contexts/ThemeContext.tsx`
Consumindo em dois componentes
Boas práticas e limites
10.6. Organização de projeto (estrutura simples e escalável)
Objetivo: reduzir acoplamento e melhorar manutenção
Sugestão de estrutura (sem impor framework)
Regras práticas
Naming e padrões
Evitar
10.7. Formulários mais complexos (sem libs, mas com padrão bom)
Relembrando: formulários controlados
Modelos de estado
A) Um state por campo
B) Um state objeto `form`
Validação: função pura `validate(form) → errors`
Exemplo mínimo “padrão de mercado”: cadastro com 4 campos
`screens/SignUpForm.tsx`
Comentários práticos
10.8. Próximos passos (contexto, sem ensinar agora)
10.9. Erros comuns e confusões clássicas
10.10. Glossário rápido
10.11. Resumo final