Sumário do Curso
Desenvolvimento Frontend com React 💻
Capacite-se para desenvolver aplicações web modernas utilizando React, aplicando as melhores práticas de componentização, gerenciamento de estado, consumo de APIs REST e deploy.
Foco do Curso
Metodologia: Aprendizado prático baseado em projeto (PBL), focado na construção de interfaces performáticas, escaláveis e visualmente atraentes.
🎯 O Que Você Vai Aprender
-
Fundamentos do React --- Domine JSX, componentes funcionais, props e a estrutura de projetos modernos com Vite. Ir para Módulo 1
-
Gerenciamento de Estado --- Aprenda a controlar o fluxo de dados com
useState,useEffect, Context API e introdução ao Redux. Ver Estados -
Navegação SPA --- Implemente rotas dinâmicas, parâmetros e navegação programática com o React Router. Ver Roteamento
-
Consumo de APIs --- Conecte sua aplicação ao mundo real consumindo APIs RESTful com Fetch e Axios, tratando erros e estados de loading. Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado para levar você do zero ao deploy de uma aplicação completa.
🧱 Módulo 1: Fundamentos e Essenciais (Aulas 01-04)
- Aula 01 - Introdução ao Frontend Moderno 🧩
- Aula 02 - Fundamentos do React 🏗️
- Aula 03 - Estado e Eventos 🔄
- Aula 04 - Ciclo de Vida e useEffect ⏱️
🎨 Módulo 2: Estilização e Componentização (Aulas 05-07)
- Aula 05 - Estilização em React 💄
- Aula 06 - Componentização Avançada 🏗️
- Aula 07 - Listas, Keys e Condicionais 📜
🚀 Módulo 3: Navegação e Gerenciamento de Dados (Aulas 08-11)
- Aula 08 - React Router 🛣️
- Aula 09 - Consumo de API REST 📡
- Aula 10 - Gerenciamento de Estado Global 🌍
- Aula 11 - Formulários Avançados 📝
🚢 Módulo 4: Qualidade e Integração Final (Aulas 12-16)
- Aula 12 - Performance e Otimização ⚡
- Aula 13 - Testes no Frontend 🧪
- Aula 14 - Integração com Backend 🔗
- Aula 15 - Build e Deploy 🚀
- Aula 16 - Projeto Final 🎓
Plano de Ensino 🧭
Curso: Desenvolvimento Frontend com React
Público-alvo: Estudantes de ADS, Ciência da Computação e Desenvolvedores de Software
Carga Horária: 20 Aulas (80 Horas Teórico-Práticas)
🎯 1. Objetivos do Curso
- Compreender os fundamentos conceituais e arquiteturais de Desenvolvimento Frontend com React.
- Aplicar padrões de projeto, sintaxe moderna e boas práticas da indústria.
- Desenvolver soluções completas através de exercícios práticos e desafios de projeto.
📚 2. Cronograma de Aulas (Matriz de 20 Semanas)
| Aula | Tema Central | Atividades e Entregas |
|---|---|---|
| 01 | Introdução ao Frontend Moderno | Teoria, Prática Guiada, Quiz e Exercícios |
| 02 | Fundamentos: JSX, Componentes e Props | Teoria, Prática Guiada, Quiz e Exercícios |
| 03 | Hooks I: useState e Estado Local | Teoria, Prática Guiada, Quiz e Exercícios |
| 04 | Hooks II: useEffect e Ciclo de Vida | Teoria, Prática Guiada, Quiz e Exercícios |
| 05 | Estilização: CSS Modules e Styled Components | Teoria, Prática Guiada, Quiz e Exercícios |
| 06 | Formulários e Validação (React Hook Form) | Teoria, Prática Guiada, Quiz e Exercícios |
| 07 | React Router: Navegação SPA ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 08 | Consumo de APIs: Fetch e Axios | Teoria, Prática Guiada, Quiz e Exercícios |
| 09 | Context API: Estado Global Simples | Teoria, Prática Guiada, Quiz e Exercícios |
| 10 | Hooks Avançados: useMemo, useCallback e useRef ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 11 | Performance: React.memo e Lazy Loading | Teoria, Prática Guiada, Quiz e Exercícios |
| 12 | Estado Global Avançado: Redux Toolkit | Teoria, Prática Guiada, Quiz e Exercícios |
| 13 | Testes Unitários: Vitest e React Testing Library | Teoria, Prática Guiada, Quiz e Exercícios |
| 14 | Integração com Backend: Firebase e Supabase ️ | Teoria, Prática Guiada, Quiz e Exercícios |
| 15 | PWA e Deploy: Colocando no Ar! | Teoria, Prática Guiada, Quiz e Exercícios |
| 16 | Projeto Final: Dashboard Completo | Teoria, Prática Guiada, Quiz e Exercícios |
| 17 | Hooks Customizados Avançados e Contexto Isolado | Teoria, Prática Guiada, Quiz e Exercícios |
| 18 | Otimização de Renderização com Memoização e Suspense | Teoria, Prática Guiada, Quiz e Exercícios |
| 19 | Gerenciamento de Estado Global Desacoplado | Teoria, Prática Guiada, Quiz e Exercícios |
| 20 | Projeto Capstone: Aplicação React SPA Autônoma Completa | Teoria, Prática Guiada, Quiz e Exercícios |
🧠 3. Metodologia de Ensino
- Teoria Fundamentada: Aulas com conceitos detalhados, diagramas arquiteturais e sintaxe de referência.
- Ciclo Teoria ⇄ Prática: Cada aula conta com Quiz Interativo (10 questões) para validação imediata, Lista de Exercícios Sanfonados (com Gabarito Explicado) e Desafio de Projeto Prático.
- Laboratório Contínuo: Ambientes configurados passo a passo na seção de Setups da plataforma.
💼 4. Competências e Perfil Desenvolvido
- Dominar as ferramentas e fluxos de desenvolvimento de Desenvolvimento Frontend com React.
- Resolver problemas técnicos de alta complexidade com código limpo e performático.
- Construir portfólio prático com 20 projetos aplicados.
📊 5. Critérios de Avaliação
- 20 Listas de Exercícios: Resolução individual dividida em Básico, Intermediário e Desafio.
- 20 Quizzes Interativos: Validação formativa com feedback imediato via JavaScript.
- 20 Desafios de Projetos: Aplicações práticas consolidando o aprendizado de cada unidade.
Aulas
Aula 01 – Introdução ao Frontend Moderno 🚀
Seja bem-vindo ao curso de Desenvolvimento Frontend com React. Nesta aula inaugural, vamos entender como a web evoluiu até chegarmos às aplicações modernas e dar nossos primeiros passos com o React.
🌍 A Evolução do Desenvolvimento Web
O desenvolvimento web passou por grandes transformações desde o surgimento da WWW.
Conceito: A Evolução
- Web Estática: Apenas HTML e CSS. Cada página era um arquivo físico no servidor.
- Web Dinâmica (MPA): Páginas geradas no servidor (PHP, Java, ASP.NET). O navegador recarregava a página inteira a cada interação.
- Aplicações Modernas (SPA): Onde entra o React. A aplicação carrega uma única vez e as atualizações ocorrem de forma fluida sem recarregar a página.
🔄 SPA vs MPA
Para entender o poder do React, precisamos comparar as Single Page Applications (SPA) com as Multi-Page Applications (MPA).
Diagrama de Fluxo
graph TD
subgraph MPA_Tradicional ["MPA (Tradicional)"]
A[Usuário clica] --> B[Requisição ao Servidor]
B --> C[Servidor processa]
C --> D[Recarrega PÁGINA INTEIRA]
end
subgraph SPA_Moderna ["SPA (Moderna / React)"]
E[Usuário clica] --> F[JavaScript intercepta]
F --> G[Requisição AJAX/Fetch]
G --> H[Atualiza apenas PARTE da página]
end
📦 O Ecossistema JavaScript
Antes de codar em React, precisamos do ambiente preparado. O React moderno depende de ferramentas essenciais:
- Node.js: O motor que executa JavaScript fora do navegador.
- NPM / Yarn: Gerenciadores de pacotes (bibliotecas).
- Vite: A ferramenta de construção (build tool) mais rápida da atualidade.
Atenção: Pré-requisito
Certifique-se de ter o Node.js instalado (versão LTS recomendada). Você pode verificar com o comando node -v no terminal.
⚛️ Introdução ao React
O React é uma biblioteca JavaScript para construir interfaces de usuário criada pelo Facebook (Meta).
Por que usar React?
- Componentização: Dividir a interface em pequenas peças reutilizáveis.
- Declarativo: Você descreve o que quer ver na tela, e o React cuida do como atualizar.
- Virtual DOM: Uma técnica de otimização que torna as atualizações de interface extremamente rápidas.
💻 Criando o Primeiro Projeto
Vamos utilizar o Vite para criar nosso ambiente React de forma instantânea.
Dica: VS Code
Sempre abra a pasta do projeto no VS Code e utilize o terminal integrado para rodar os comandos acima.
🚀 Prática da Aula
- Instale o Node.js se ainda não tiver.
- Crie seu primeiro projeto usando o comando do terminal acima.
- Abra o arquivo
App.jsxe tente alterar o texto que aparece na tela. - Veja a mágica do Hot Module Replacement (HMR): a página atualiza instantaneamente ao salvar!
Aula 02 – Fundamentos: JSX, Componentes e Props 🧱
Nesta aula, vamos mergulhar no coração do React. Vamos entender como criar peças reutilizáveis de interface e como passar dados entre elas.
🏗️ O que são Componentes?
Componentes são os blocos de construção de qualquer aplicação React. Pense neles como funções JavaScript que retornam elementos de interface.
Regra de Ouro
Todo componente React deve começar com letra maiúscula (ex: MeuBotao em vez de meubotao). Isso ajuda o React a diferenciar componentes de tags HTML padrão.
⚛️ JSX: JavaScript + XML
O JSX nos permite escrever algo muito parecido com HTML dentro do nosso código JavaScript.
Exemplos de Transpilação
// O que escrevemos (JSX)
const elemento = <h1 className="titulo">Olá!</h1>;
// O que o React entende
const elemento = React.createElement('h1', {className: 'titulo'}, 'Olá!');
Regras do JSX:
- Tag Pai Única: Um componente deve retornar apenas um elemento raiz (ou use
<> ... </>). - Fechamento de Tags: Todas as tags devem ser fechadas (ex:
<img />,<br />). - CamelCase: Atributos HTML viram CamelCase (ex:
classviraclassName,onclickviraonClick).
🎁 Props: Passando Informação
Props (abreviação de properties) são como argumentos que passamos para os componentes para torná-os dinâmicos e reutilizáveis.
// Definindo o componente
function Saudacao(props) {
return <h1>Olá, {props.nome}!</h1>;
}
// Usando o componente
<Saudacao nome="Maria" />
<Saudacao nome="João" />
Imutabilidade
As Props são somente leitura. Um componente nunca deve tentar modificar as props que recebe.
🧩 Composição de Componentes
Podemos colocar componentes dentro de outros componentes, criando uma hierarquia.
graph TD
App[App.jsx] --> Header[Header.jsx]
App --> Main[Main.jsx]
App --> Footer[Footer.jsx]
Main --> Card1[Card.jsx]
Main --> Card2[Card.jsx]
🚀 Prática da Aula
Vamos criar uma lista de "Cards" de produtos.
- Crie um novo arquivo
src/components/Card.jsx. - Defina o componente
Cardque recebetitulo,precoeimagemvia props. - No seu
App.jsx, importe oCarde use-o várias vezes com dados diferentes.
Dica: Destructuring
Em vez de usar props.nome, você pode capturar o dado diretamente:
function Saudacao({ nome }) { ... }
Aula 03 – Hooks I: useState e Estado Local 🎣
Nesta aula, vamos aprender como tornar nossas aplicações interativas. O Estado é o que permite ao React lembrar de informações e reagir a ações do usuário.
🧠 O que é o "Estado"?
Diferente das Props (que são passadas de fora), o Estado é uma informação que o próprio componente gerencia internamente.
Conceito: Reatividade
Sempre que o estado de um componente muda, o React "re-renderiza" o componente, atualizando a interface automaticamente para refletir a nova informação.
🎣 O Hook useState
Para adicionar estado a um componente funcional, usamos o hook useState.
import { useState } from 'react';
function Contador() {
// declarando uma variável de estado 'valor' e a função 'setValor'
const [valor, setValor] = useState(0);
return (
<div>
<p>Você clicou {valor} vezes</p>
<button onClick={() => setValor(valor + 1)}>
Aumentar
</button>
</div>
);
}
Anatomia do useState:
- valor: O estado atual.
- setValor: A função para atualizar o estado.
- 0: O valor inicial.
⚠️ Regras dos Hooks
- Apenas no nível superior: Não chame hooks dentro de loops, condições ou funções aninhadas.
- Apenas em funções React: Chame hooks apenas em componentes funcionais ou em Hooks Customizados.
🔄 Fluxo de Dados e Estado
O estado pode ser passado para baixo via props, mas nunca para cima (diretamente).
graph TD
Parent[Componente Pai - Estado: contador] -- passa via props --> Child[Componente Filho - recebe: valor]
Child -- chama função do pai --> Parent
🚀 Prática da Aula
Vamos criar um interruptor de "Modo Escuro" (Dark Mode) simples.
- Crie um componente
Tema. - Use o
useStatepara guardar um booleano (true/false). - Ao clicar no botão, altere o estado.
- Mude o estilo (background-color) do componente baseado no estado.
Importante
Nunca altere o estado diretamente (valor = valor + 1). Sempre use a função de atualização (setValor).
Aula 04 – Hooks II: useEffect e Ciclo de Vida 🔄
Nesta aula, vamos entender como lidar com efeitos colaterais em nossos componentes, como buscar dados de APIs e sincronizar o React com o mundo exterior.
🛰️ O que são Efeitos Colaterais?
Efeitos colaterais (side effects) são ações que acontecem fora do fluxo de renderização do React. Exemplos: - Buscar dados de uma API (fetch). - Manipular o DOM diretamente (raro, mas acontece). - Configurar um cronômetro (setInterval).
🎣 O Hook useEffect
O useEffect nos permite executar código em momentos específicos do ciclo de vida do componente.
import { useEffect, useState } from 'react';
function ExemploEfeito() {
useEffect(() => {
console.log("O componente foi montado!");
// Opcional: Função de limpeza (cleanup)
return () => console.log("O componente será desmontado");
}, []); // Array de dependências
return <h1>Confira o console!</h1>;
}
📦 O Array de Dependências
O comportamento do useEffect muda drasticamente dependendo do que passamos no segundo argumento:
| Array | Comportamento |
|---|---|
| Sem o array | Executa a cada renderização (Cuidado!). |
Array vazio [] |
Executa apenas uma vez (quando o componente monta). |
Com variáveis [prop, estado] |
Executa sempre que uma dessas variáveis mudar. |
🌐 Buscando Dados de uma API
O uso mais comum do useEffect é para carregar dados assim que a tela abre.
🚀 Prática da Aula
Vamos criar um buscador de usuários do GitHub.
- Crie um estado para o
usuarioe outro para onomeUsuario. - Use o
useEffectpara carregar os dados de um usuário padrão ao iniciar. - Adicione um botão que, ao ser clicado, dispara uma nova busca baseada no input.
Dica: Loading
Sempre crie um estado loading (true/false) para mostrar uma mensagem de "Carregando..." enquanto a API não responde. Isso melhora muito a experiência do usuário (UX).
🧩 Ciclo de Vida do Componente
graph LR
A[Mounting] --> B[Updating]
B --> C[Unmounting]
style A fill:#dfd
style B fill:#ffd
style C fill:#fdd
- Mounting: Quando o componente nasce na tela.
- Updating: Quando o estado ou as props mudam.
- Unmounting: Quando o componente sai da tela.Aula 05 – Estilização: CSS Modules e Styled Components 🎨
Existem várias formas de estilizar um projeto React. Hoje vamos conhecer as técnicas que evitam conflitos de nomes e tornam o CSS mais dinâmico.
📦 1. CSS Modules
O CSS Modules permite escrever CSS normal, mas garante que os nomes das classes sejam únicos por componente.
Como usar:
- Crie um arquivo chamado
Botao.module.css. - Importe no seu componente:
import styles from './Botao.module.css'.
Vantagem
O CSS Modules renomeia suas classes no navegador (ex: btnPrimario_abc123), eliminando o risco de um estilo "vazar" para outro componente.
💅 2. Styled Components (CSS-in-JS)
O Styled Components permite escrever CSS diretamente dentro do arquivo JavaScript, usando a sintaxe de Tagged Templates.
Instalação:
Exemplo de Uso:
import styled from 'styled-components';
const BotaoCustomizado = styled.button`
background-color: ${props => props.color || 'blue'};
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
&:hover {
filter: brightness(0.9);
}
`;
🌈 CSS Condicional
Com React, é fácil mudar o estilo baseado no estado ou em props.
🚀 Prática da Aula
Vamos criar uma "Biblioteca de Botões" temática.
- Crie um componente
Botaousando Styled Components. - Adicione as variantes:
success,dangerewarning. - O botão deve mudar de cor dependendo da prop recebida.
📊 Comparativo de Técnicas
| Técnica | Pró | Contra |
|---|---|---|
| CSS Modules | Nativo do Vite, fácil de aprender. | Menos dinâmico, arquivos separados. |
| Styled Components | Super dinâmico, CSS vira componente. | Precisa de biblioteca extra, curva de aprendizado. |
| Tailwind CSS | Desenvolvimento ultra rápido. | HTML fica "poluído" com muitas classes. |
Qual escolher?
Em projetos grandes, costuma-se usar uma combinação de Styled Components (para lógica de UI) e classes utilitárias.
Aula 06 – Formulários e Validação (React Hook Form) 📝
Lidar com formulários pode ser trabalhoso. Hoje vamos aprender como simplificar esse processo usando a biblioteca mais popular do ecossistema: o React Hook Form.
🤯 O Problema do "Controlled Components"
No React tradicional, precisamos de um estado para cada campo de input. Em formulários grandes, isso gera muito código repetitivo (boilerplate).
🛠️ Introdução ao React Hook Form
Essa biblioteca foca em performance e simplicidade, permitindo gerenciar o formulário com menos re-renderizações.
Instalação:
Exemplo Básico:
import { useForm } from 'react-hook-form';
function Formulario() {
const { register, handleSubmit } = useForm();
const onSubmit = (dados) => {
console.log(dados);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("nome")} placeholder="Seu nome" />
<input {...register("email")} placeholder="Seu e-mail" />
<button type="submit">Enviar</button>
</form>
);
}
✅ Validação sem Dor
O React Hook Form já vem com suporte a regras de validação (required, minLength, pattern).
<input
{...register("senha", { required: true, minLength: 6 })}
type="password"
/>
{errors.senha && <p>A senha deve ter pelo menos 6 caracteres.</p>}
🚀 Prática da Aula
Vamos criar um formulário de "Cadastro de Usuário" completo.
- Campos: Nome, E-mail, Senha e Confirmar Senha.
- Regra: Todos os campos são obrigatórios.
- Regra: O e-mail deve ser um formato válido.
- Ao enviar com sucesso, limpe o formulário e exiba um alerta de "Sucesso!".
📊 Por que usar React Hook Form?
graph TD
A[Formulário React] --> B{Muitos Inputs?}
B -- Sim --> C[React Hook Form: Mais rápido e menos código]
B -- Não --> D[useState: Simples para 1 ou 2 campos]
Dica: Zod
Para validações complexas, você pode integrar o React Hook Form com o Zod, uma biblioteca de esquema de dados sensacional que veremos em breve!
Aula 07 – React Router: Navegação SPA 🗺️
Uma Single Page Application (SPA) não deve recarregar a página ao mudar de link. Hoje vamos aprender a usar o React Router para criar rotas e navegação fluida.
🧭 O que é o React Router?
É a biblioteca padrão para gerenciar a navegação em projetos React. Ela permite mapear URLs (ex: /contato) para componentes específicos.
Instalação:
🏗️ Estrutura Básica
Para ativar as rotas, envolvemos nossa aplicação no componente BrowserRouter.
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<nav>
<Link to="/">Home</Link> | <Link to="/sobre">Sobre</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/sobre" element={<Sobre />} />
<Route path="*" element={<NotFound />} />
</Routes>
</BrowserRouter>
);
}
🔗 Link vs
Atenção
Sempre use o componente <Link> do React Router em vez da tag <a>.
- <a>: Recarrega a página inteira (mata o estado do React).
- <Link>: Intercepta o clique e apenas troca o componente na tela.
parametros de Rota (Params)
Podemos criar rotas dinâmicas, como /perfil/ricardo.
<Route path="/perfil/:username" element={<Perfil />} />
// No componente Perfil
import { useParams } from 'react-router-dom';
const { username } = useParams();
🚀 Prática da Aula
Vamos criar um "Mini Portal de Notícias".
- Crie as páginas:
Home,Esportes,TecnologiaeContato. - Crie uma barra de navegação que apareça em todas as páginas.
- Implemente uma página de erro 404 para rotas não encontradas.
- (Bônus) Use o
useNavigatepara redirecionar o usuário para a Home após preencher um formulário de contato.
📊 Como funciona a Navegação?
graph LR
A[URL: /sobre] --> B{Router}
B -- match --> C[Componente Sobre]
B -- no match --> D[Componente 404]
Dica: NavLink
Use <NavLink> em vez de <Link> se quiser adicionar uma classe CSS automática (como .active) ao link da página onde o usuário está no momento.
Aula 08 – Consumo de APIs: Fetch e Axios 📡
Já vimos o fetch, mas hoje vamos aprofundar no consumo de dados reais e conhecer o Axios, uma biblioteca poderosa que facilita a vida do desenvolvedor.
🐙 Fetch vs Axios
O fetch é nativo do navegador, mas o Axios oferece recursos extras como cancelamento de requisições, instâncias reutilizáveis e transformação automática para JSON.
Instalação:
🛠️ Criando uma Instância Axios
Em vez de repetir a URL base em todo lugar, criamos um arquivo src/services/api.js.
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.github.com'
});
export default api;
Usando no Componente:
useEffect(() => {
api.get('/users/ricardotecpro')
.then(response => setUsuario(response.data));
}, []);
🛑 Tratamento de Erros e Estados
Sempre que lidamos com internet, as coisas podem falhar. Devemos estar preparados.
try {
const res = await api.get('/posts');
setPosts(res.data);
} catch (error) {
console.error("Ops! Algo deu errado", error);
setMsgErro("Não foi possível carregar os dados.");
}
🚀 Prática da Aula
Vamos criar um "Dashboard de Criptomoedas".
- Use a CoinGecko API (ou qualquer outra pública).
- Liste o nome, símbolo e preço atual das 10 principais moedas.
- Adicione um botão de "Atualizar" que dispara a busca novamente através do Axios.
- Mostre uma mensagem de erro estilizada se a API estiver fora do ar.
📊 Fluxo da Requisição
sequenceDiagram
participant User as Usuário
participant React as Componente React
participant API as Servidor API
User->>React: Clica em "Carregar"
React->>API: GET /dados (via Axios)
API-->>React: 200 OK (JSON)
React-->>User: Mostra Dados na Tela
Dica: Async/Await
Prefira usar async/await em vez de .then(). O código fica muito mais legível e fácil de dar manutenção.
Aula 09 – Context API: Estado Global Simples 🌐
Às vezes, as Props não são suficientes. Passar dados por 5 ou 6 níveis de componentes (Prop Drilling) é cansativo. Hoje vamos aprender a usar a Context API para compartilhar dados globalmente.
😵 O Problema do Prop Drilling
graph TD
App --> Pagina
Pagina --> Sidebar
Sidebar --> Menu
Menu --> Item[Item do Menu - Precisa do nome do Usuário]
No exemplo acima, todos os componentes do meio precisam receber o "usuário" apenas para passá-lo adiante. Isso é o Prop Drilling.
💡 A Solução: Context API
O Contexto permite que qualquer componente acesse o dado diretamente, "pulando" os intermediários.
Passo 1: Criar o Contexto
// src/contexts/AuthContext.jsx
import { createContext, useState } from 'react';
export const AuthContext = createContext();
export function AuthProvider({ children }) {
const [user, setUser] = useState({ nome: 'Convidado' });
return (
<AuthContext.Provider value={{ user, setUser }}>
{children}
</AuthContext.Provider>
);
}
Passo 2: O Provedor (Provider)
Envolva a aplicação no main.jsx ou App.jsx.
Passo 3: Consumir os Dados
import { useContext } from 'react';
import { AuthContext } from './contexts/AuthContext';
const { user } = useContext(AuthContext);
🚀 Prática da Aula
Vamos criar uma "Loja com Carrinho".
- Crie um
CarrinhoContext. - O estado global deve ser um array de produtos no carrinho.
- Crie componentes em lugares diferentes da tela:
Navbar: Deve mostrar a quantidade de itens no carrinho.Vitrine: Deve ter botões para adicionar itens ao contexto.CarrinhoLateral: Deve listar os itens que estão no contexto.
📊 Prop Drilling vs Context
| Técnica | Quando usar? |
|---|---|
| Props | Para dados que só o filho imediato precisa. |
| Context API | Para dados globais (Tema, Autenticação, Carrinho). |
| Redux | Para aplicações gigantescas com lógica complexa. |
Dica de Ouro
Não coloque TUDO no contexto. Use-o apenas para o que realmente precisa ser global, para evitar renderizações desnecessárias.
Aula 10 – Hooks Avançados: useMemo, useCallback e useRef 🏗️
Além dos hooks básicos, o React oferece ferramentas para lidar com performance e referências diretas ao DOM. Hoje vamos aprender a usar o "cérebro" do React de forma mais eficiente.
🏎️ useMemo: Memorizando Valores
O useMemo serve para evitar que cálculos caros (pesados) sejam refeitos em toda renderização se os dados não mudaram.
Quando usar?
Use apenas se a operação for realmente lenta. Memorizar tudo sem necessidade pode deixar o código mais complexo e até mais lento.
⚡ useCallback: Memorizando Funções
No React, toda vez que um componente renderiza, as funções dentro dele são "recriadas". O useCallback mantém a mesma instância da função entre as renderizações.
const handleClick = useCallback(() => {
console.log("Cliquei!");
}, []); // Função memorizada para sempre
📍 useRef: Acesso Direto e Memória Silenciosa
O useRef serve para duas coisas principais:
1. Acessar o DOM: Focar um input, rolar a página, etc.
2. Variável de Instância: Guardar um valor que NÃO dispara re-renderização quando muda.
const inputRef = useRef();
const focarInput = () => {
inputRef.current.focus(); // Acesso direto ao elemento HTML
};
return <input ref={inputRef} />;
🚀 Prática da Aula
Vamos criar uma lista filtrável ultra-performática.
- Gere uma lista de 500 nomes (ou use um array estático grande).
- Crie um input de busca.
- Use o
useMemopara filtrar a lista apenas quando o termo de busca mudar. - Use o
useRefpara que, ao carregar a página, o cursor já comece dentro do campo de busca.
📊 Comparativo de Hooks
| Hook | Objetivo Principal |
|---|---|
| useMemo | Guardar o resultado de um cálculo. |
| useCallback | Guardar a referência de uma função. |
| useRef | Guardar uma referência a um elemento ou valor mutável (sem re-render). |
Cuidado com a Otimização Prematura
"Otimização prematura é a raiz de todo mal". Só use esses hooks se você notar que a tela está lenta ou se precisar passar funções para componentes otimizados com React.memo.
Aula 11 – Performance: React.memo e Lazy Loading 🚀
Uma aplicação profissional deve ser rápida e leve. Hoje vamos aprender como evitar renderizações inúteis e carregar apenas o necessário para o usuário.
🧠 1. React.memo: Evitando Re-renders
Por padrão, quando um componente pai renderiza, todos os seus filhos renderizam também. O React.memo impede isso se as props do filho não mudaram.
import { memo } from 'react';
const FilhoPesado = memo(({ dado }) => {
return <div>{dado}</div>;
});
😴 2. Code Splitting e Lazy Loading
Por que carregar o código da página de "Configurações" se o usuário está na "Home"? O Lazy Loading divide seu código em pedaços menores.
import { lazy, Suspense } from 'react';
const PaginaConfig = lazy(() => import('./PaginaConfig'));
function App() {
return (
<Suspense fallback={<div>Carregando página...</div>}>
<PaginaConfig />
</Suspense>
);
}
📸 3. Otimização de Imagens
Imagens pesadas matam a performance. No React, devemos:
- Usar formatos modernos (WebP).
- Adicionar o atributo loading="lazy" nas tags img.
- Usar tamanhos adequados para cada tela.
🚀 Prática da Aula
Vamos otimizar uma aplicação "pesada".
- Crie um componente pai que tem um contador.
- Crie um componente filho que apenas exibe um texto estático.
- Use o console.log para ver o filho renderizando sem necessidade.
- Aplique o
React.memoe veja a mágica acontecer. - Implemente o
lazyeSuspenseem uma das rotas do seu projeto anterior.
📊 Ferramentas de Análise
- React DevTools (Profiler): Para ver quanto tempo cada componente leva para renderizar.
- Lighthouse: Ferramenta do Chrome para medir a performance geral do site.
Dica: Virtualização
Para listas com milhares de itens, não use apenas .map. Procure sobre Windowing ou Virtualização (libs como react-window).
Aula 12 – Estado Global Avançado: Redux Toolkit 🏪
Quando a aplicação cresce demais, a Context API pode se tornar confusa. Para sistemas complexos de nível Enterprise, utilizamos o Redux Toolkit (RTK).
🏗️ O que é o Redux?
O Redux funciona como um "Banco de Dados compartilhado" para o frontend. Ele segue um fluxo de dados rigoroso e previsível.
Instalação:
🍰 O Conceito de Slice
No Redux moderno, dividimos nosso estado em "fatias" (Slices). Cada slice contém o estado e as funções que o alteram.
// src/store/counterSlice.js
import { createSlice } from '@reduxjs/toolkit';
const counterSlice = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
increment: (state) => { state.value += 1 },
decrement: (state) => { state.value -= 1 },
},
});
export const { increment, decrement } = counterSlice.actions;
export default counterSlice.reducer;
🎣 Hooks do Redux
Para interagir com o Redux nos componentes funcionais, usamos dois hooks principais: - useSelector: Para ler dados da Store. - useDispatch: Para "disparar" uma ação de mudança.
const count = useSelector((state) => state.counter.value);
const dispatch = useDispatch();
<button onClick={() => dispatch(increment())}>+</button>
🚀 Prática da Aula
Vamos criar uma lista de "Favoritos" global.
- Crie um
favoritesSlice. - O estado deve ser uma lista de IDs de produtos.
- Ao clicar no " ❤️ " em qualquer lugar da aplicação, o ID deve ser adicionado ao Redux.
- Crie uma página de "Favoritos" que lê esses IDs e exibe os produtos correspondentes.
📊 Context API vs Redux
| Recurso | Context API | Redux Toolkit |
|---|---|---|
| Curva de Aprendizado | Baixa | Média/Alta |
| Performance | Boa | Excelente (em larga escala) |
| Ferramentas de Debug | Limitadas | Redux DevTools (Incrível) |
Dica: Redux DevTools
Instale a extensão do Chrome Redux DevTools. Ela permite que você "viaje no tempo", vendo exatamente o que mudou no estado a cada segundo!
Aula 13 – Testes Unitários: Vitest e React Testing Library 🧪
Escrever testes garante que seu código continue funcionando após mudanças e refatorações. Hoje vamos aprender a testar nossos componentes da forma correta.
🛠️ O que testar?
Não precisamos testar tudo, mas devemos focar em: - Lógica de Negócio: Funções que fazem cálculos ou transformações. - Interação do Usuário: O botão clicado disparou a ação correta? - Renderização: O componente exibiu o dado esperado?
🏗️ Ferramentas Modernas
- Vitest: O sucessor do Jest, extremamente rápido e nativo do Vite.
- React Testing Library (RTL): Foca em testar o componente como o usuário o vê (testando acessibilidade e texto, não a implementação interna).
Instalação:
📝 Escrevendo seu Primeiro Teste
import { render, screen } from '@testing-library/react';
import { test, expect } from 'vitest';
import Saudacao from './Saudacao';
test('deve renderizar o nome do usuário corretamente', () => {
render(<Saudacao nome="Ricardo" />);
const elemento = screen.getByText(/Olá, Ricardo/i);
expect(elemento).toBeInTheDocument();
});
🚀 Prática da Aula
Vamos criar testes para o componente Contador.
- Crie o componente
Contadorcom um estado inicial zero. - Escreva um teste que verifica se o valor "0" aparece na tela.
- Escreva um teste que simula o clique no botão de "Incrementar" e verifica se o valor mudou para "1".
- Use o
userEventpara simular as interações de forma mais realista.
📊 Por que testar?
graph TD
A[Mudança no Código] --> B{Tem Testes?}
B -- Sim --> C[Testes rodam e dão segurança]
B -- Não --> D[Rezamos para não quebrar nada em produção]
C --> E[Deploy Tranquilo]
D --> F[Bugs inesperados]
Dica: TDD
Tente o Test Driven Development: escreva o teste ANTES de escrever o código do componente. Isso ajuda a pensar melhor na arquitetura da sua solução!
Aula 14 – Integração com Backend: Firebase e Supabase ☁️
Muitas vezes não queremos criar um servidor do zero. Hoje vamos conhecer o BaaS (Backend as a Service) e como eles facilitam a vida do desenvolvedor frontend.
🔥 O que é Firebase?
O Firebase (do Google) oferece: - Authentication: Login fácil (Google, GitHub, E-mail). - Firestore: Banco de dados NoSQL em tempo real. - Storage: Armazenamento de imagens e vídeos.
⚡ O que é Supabase?
O Supabase é a alternativa de código aberto ao Firebase, baseada em PostgreSQL. Ele permite usar SQL real no seu banco de dados na nuvem.
🔐 Configurando o Firebase
Normalmente colocamos as credenciais em um arquivo .env para segurança:
// firebase.config.js
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
const firebaseConfig = {
apiKey: import.meta.env.VITE_API_KEY,
authDomain: "...firebaseapp.com",
projectId: "...",
// ...
};
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
🚀 Prática da Aula
Vamos criar um "Caderno de Notas" online.
- Crie um projeto no console do Firebase.
- Configure o Firestore (Database).
- No React, crie um formulário que salva uma nota no banco.
- Use o
onSnapshot(Firebase) para ver a nota aparecer na sua lista segundos após ser criada em outro dispositivo!
📊 Comparativo
| Recurso | Firebase | Supabase |
|---|---|---|
| Banco de Dados | NoSQL (Documentos) | SQL (Tabelas) |
| Facilidade | Muito Alta | Alta |
| Preço | Grátis até certo ponto | Grátis até certo ponto |
Segurança
Nunca suba suas chaves de API (apiKey) para o GitHub público! Use sempre o arquivo .gitignore para esconder seu .env.
Aula 15 – PWA e Deploy: Colocando no Ar! 🚀
Seu app está pronto, mas onde ele vai morar? Hoje vamos aprender a transformar seu site em um "Aplicativo Instalável" e fazer o deploy profissional.
📱 O que é PWA (Progressive Web App)?
Uma PWA permite que seu site se comporte como um App Nativo: - Instalação: Link "Adicionar à tela de início" no celular. - Offline: Funciona mesmo sem internet (via Service Workers). - Velocidade: Carregamento instantâneo.
🚢 Fazendo o Deploy
Existem plataformas fantásticas que automatizam o processo de colocar seu código no ar direto do GitHub.
1. Vercel (Recomendado para Next.js e Vite)
- Conecte sua conta do GitHub.
- Escolha o repositório.
- Clique em "Deploy". Pronto!
2. Netlify
Semelhante à Vercel, excelente para sites estáticos e SPAs.
🔍 SEO e Meta Tags
Para que seu app apareça bem no Google e tenha uma imagem bonita quando compartilhado no WhatsApp, configure o index.html:
<title>Meu App Incrível</title>
<meta name="description" content="A melhor descrição de todas">
<meta property="og:image" content="https://meuapp.com/capa.jpg">
🚀 Prática da Aula
Vamos colocar seu projeto no ar HOJE!
- Crie uma conta na Vercel ou Netlify.
- Suba seu código final para o GitHub.
- Configure o deploy automático (Continuous Deployment).
- Teste o link gerado no seu celular.
- (Desafio) Configure o manifesto da PWA para que o Chrome peça para instalar o site.
📊 Ciclo do Deploy Automático
graph LR
A[Código Local] -->|git commit| B[GitHub]
B -->|Webhook| C[Vercel/Netlify]
C -->|Build| D[Site Online 🎉]
Comemoração
Parabéns! Você saiu do zero e agora tem uma aplicação React rodando na nuvem para o mundo todo ver!
Aula 16 – Projeto Final: Dashboard Completo 🏆
Chegou o grande dia! Vamos unir todo o conhecimento das últimas 15 aulas para construir uma aplicação completa, do design ao deploy.
🎯 O Desafio Final
Você deve construir um Dashboard de Gestão Profissional. Pode ser: - Um Gestor de Projetos (estilo Trello/Asana). - Um E-commerce Completo com Checkout. - Uma Rede Social de Nicho. - Um Sistema de Gestão de Clínica/Academia.
🛠️ O que deve haver no Projeto?
Para ser aprovado com distinção, seu app precisa de: 1. Rotas: Múltiplas páginas bem estruturadas. 2. Estado Global: Uso de Redux Toolkit ou Context API. 3. Consumo de API: Dados reais ou do Firebase/Supabase. 4. Formulários: Validação com React Hook Form. 5. Estilização: Styled Components ou Tailwind CSS. 6. Performance: Uso de memo, lazy e Suspense. 7. Qualidade: Pelo menos 3 testes unitários principais.
📝 Cronograma de Entrega
- Manhã: Definição do Escopo e Prototipagem (Figma/Rascunho).
- Tarde: Mão na massa! Desenvolvimento das funcionalidades core.
- Noite: Ajustes de Design, Testes e Deploy Final.
🏁 Apresentação
Prepare um "Pitch" de 5 minutos sobre seu projeto: - Qual problema ele resolve? - Qual foi o maior desafio técnico? - O que você aprendeu de mais importante?
Mensagem Final
O desenvolvimento frontend é uma jornada constante. Este curso foi apenas o primeiro passo. Continue estudando, construindo projetos e compartilhando conhecimento. O mundo do React é gigante! ⚛️🚀
Aula 17 - Hooks Customizados Avançados e Contexto Isolado ⚛️
Objetivo Pedagógico
Objetivo: Arquitetura e composição de Custom Hooks avançados, isolamento de escopo com Context API modular e regras estritas de renderização.
📑 1. Fundamentos Teóricos & Análise Técnica
Os Custom Hooks no React representam o principal mecanismo para compartilhamento de lógica com estado (stateful logic) entre componentes sem a necessidade de alterar a hierarquia visual da árvore de renderização. Ao contrário dos componentes de classe legados baseados em Mixins ou Higher-Order Components (HOCs), os Custom Hooks compõem primitivas fundamentais (useState, useReducer, useEffect, useRef, useCallback) em funções puras e coesas.
O uso ingênuo de Context API, contudo, introduz problemas graves de desempenho. Quando um valor em um Context.Provider sofre mutação, todos os componentes consumidores que chamam useContext são forçados a re-renderizar, independentemente de estarem utilizando a propriedade específica que mudou.
Para solucionar esse gargalo em aplicações profissionais:
1. Separação de Contextos: Divisão de estados em dois contextos paralelos — um para o Estado (StateContext) e outro para os Despachantes de Ação (DispatchContext).
2. Contextos Isolados por Feature: Em vez de um único contexto global monolítico, instanciar provedores locais escopados aos limites do módulo.
3. Seletores Granulares: Implementação de hooks customizados que extraem apenas fatias necessárias do estado.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
subgraph ArquiteturaContexto ["Padrão de Contexto Isolado em React"]
Provider["OrderProvider (Provedor Escopado)"] --> StateCtx["OrderStateContext (Dados)"]
Provider --> DispatchCtx["OrderDispatchContext (Funções de Ação)"]
end
StateCtx --> HookState["useOrderState() -> Lê Dados do Pedido"]
DispatchCtx --> HookDispatch["useOrderDispatch() -> Dispara Ações (Nunca re-renderiza por dados!)"]
HookState --> CompViewer["ViewComponent (Re-renderiza apenas se dados mudarem)"]
HookDispatch --> CompButton["ActionButton (Zero re-renderizações desnecessárias!)"]
style ArquiteturaContexto fill:#e3f2fd,stroke:#1565c0
style CompViewer fill:#fff3e0,stroke:#e65100
style CompButton fill:#e8f5e9,stroke:#2e7d32
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Composição Funcional de Hooks: Encapsulamento de efeitos colaterais, sincronização com APIs e ciclo de vida.
- Desacoplamento State vs. Dispatch: Componentes que apenas disparam ações não devem assinar as atualizações de estado.
- Regras Estritas de Hooks: Chamadas restritas ao nível superior de componentes ou outros custom hooks.
- Abstração Limpa de Efeitos: Ocultação de detalhes de implementação como AbortController dentro de hooks especializados.
🛠️ 2. Implementação Prática em React 18+ Hooks e Context API
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// use-fetch-abortable.ts (Custom Hook com Cancelamento Automático)
import { useState, useEffect, useRef } from 'react';
export function useFetchAbortable<T>(url: string) {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
const controller = new AbortController();
setLoading(true);
fetch(url, { signal: controller.signal })
.then(res => {
if (!res.ok) throw new Error(`HTTP error: ${res.status}`);
return res.json() as Promise<T>;
})
.then(resData => {
setData(resData);
setError(null);
})
.catch(err => {
if (err.name !== 'AbortError') {
setError(err);
}
})
.finally(() => setLoading(false));
// Cleanup: cancela a requisição se o componente desmontar
return () => controller.abort();
}, [url]);
return { data, loading, error };
}
💡 Análise Passo a Passo do Código
- AbortController Dedicado: A cada mudança da prop
url, uma nova instância deAbortControlleré criada para monitorar a requisição. - Cleanup Eficiente: A função retornada pelo
useEffectaborta requisições pendentes se o usuário trocar de página rapidamente. - Tratamento de AbortError: Erros de cancelamento proposital são ignorados para não poluir o estado visual do componente.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 18 - Otimização de Renderização com Memoização e Suspense 🚀
Objetivo Pedagógico
Objetivo: Eliminação de re-renderizações desnecessárias com React.memo, useMemo e useCallback, integrando carregamento declarativo com Suspense e Concurrent Features.
📑 1. Fundamentos Teóricos & Análise Técnica
No modelo mental do React, sempre que o estado de um componente sofre mutação, aquele componente e toda a sua subárvore descendente são reavaliados pelo algoritmo de reconciliação (Fiber reconciler). Em árvores de componentes densas, essas re-renderizações em cascata desperdiçam preciosos milissegundos de CPU na thread principal.
As ferramentas de memoização resolvem esses gargalos através de igualdade referencial:
1. React.memo: Higher-Order Component que compara superficialmente (shallow compare) as props recebidas. Se forem idênticas às da renderização anterior, o React pula a execução do componente.
2. useMemo: Guarda em cache o resultado de computações matemáticas ou transformações de coleções custosas.
3. useCallback: Preserva a identidade referencial de funções passadas como callbacks para componentes filhos memoizados.
Paralelamente, o React Suspense revoluciona o gerenciamento de estados assíncronos ao permitir que componentes pausem declarativamente sua renderização enquanto aguardam a resolução de recursos assíncronos (código via React.lazy ou dados de rede), delegando a exibição de skeletons a limites superiores (Suspense Boundaries).
📐 Arquitetura Conceitual & Diagrama de Fluxo
sequenceDiagram
autonumber
participant App as Componente Pai
participant Boundary as <Suspense fallback={<Skeleton />}>
participant AsyncComp as Componente Assíncrono (React.lazy)
participant Fiber as React Fiber Reconciler
App->>Boundary: Dispara Renderização
Boundary->>AsyncComp: Tenta Renderizar Filho
AsyncComp-->>Fiber: Lança Promise (Carregando Chunk JS)
Fiber-->>Boundary: Captura Promise
Boundary-->>App: Renderiza Instantaneamente o Fallback (Skeleton)
AsyncComp->>Fiber: Promise Resolvida (Chunk Pronto)
Fiber->>Boundary: Troca Declarativa para o Componente Real
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Igualdade Referencial Estrita: Compreensão de que {} e [] literais criam novas referências a cada render.
- Custo vs. Benefício da Memoização: Aplicação cirúrgica de useMemo apenas quando o custo do cálculo supera o overhead da comparação de dependências.
- Fronteiras de Suspense Declarativas: Isolamento de falhas e estados de carregamento sem poluir a lógica dos componentes com if (loading).
- Transições Concorrentes (useTransition): Marcação de atualizações de baixa prioridade para não congelar o campo de digitação do usuário.
🛠️ 2. Implementação Prática em React Profiler, useMemo e React Suspense
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// memoized-dashboard.tsx (Memoização Cirúrgica e Suspense Boundary)
import React, { useState, useMemo, useCallback, Suspense, lazy } from 'react';
// Lazy loading do componente gráfico pesado
const AnalyticsChart = lazy(() => import('./AnalyticsChart'));
interface Item { id: number; value: number; name: string; }
// Componente filho memoizado
const ListItem = React.memo(({ item, onSelect }: { item: Item; onSelect: (id: number) => void }) => {
return (
<div onClick={() => onSelect(item.id)} className="item-row">
<span>{item.name}</span>
</div>
);
});
export function Dashboard({ rawData }: { rawData: Item[] }) {
const [filter, setFilter] = useState('');
// 1. Memoização de cálculo pesado
const filteredList = useMemo(() => {
return rawData.filter(d => d.name.toLowerCase().includes(filter.toLowerCase()));
}, [rawData, filter]);
// 2. Preservação de referência de função
const handleSelect = useCallback((id: number) => {
console.log('Item selecionado:', id);
}, []);
return (
<div>
<input value={filter} onChange={e => setFilter(e.target.value)} placeholder="Filtrar..." />
{filteredList.map(item => (
<ListItem key={item.id} item={item} onSelect={handleSelect} />
))}
<Suspense fallback={<div class="skeleton">Carregando Gráficos...</div>}>
<AnalyticsChart data={filteredList} />
</Suspense>
</div>
);
}
💡 Análise Passo a Passo do Código
- React.memo no Filho:
ListItemevita re-renderizar caso suas propsitemeonSelectmantenham a mesma referência em memória. - useCallback Estável:
handleSelectnão é recriado quando o usuário digita no inputfilter, preservando a memoização doListItem. - Suspense Declarativo: O componente pesado
AnalyticsChartexibe o fallback sem bloquear a interface de digitação.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 19 - Gerenciamento de Estado Global Desacoplado 🌐
Objetivo Pedagógico
Objetivo: Arquitetura de estado global moderno com bibliotecas atômicas/baseadas em seletor (Zustand), eliminando boilerplate e otimizando subscrições.
📑 1. Fundamentos Teóricos & Análise Técnica
O gerenciamento de estado global em React passou por ciclos de evolução marcados por diferentes filosofias. O modelo histórico do Redux clássico, embora previsível e determinístico, impunha uma sobrecarga massiva de boilerplate (actions, action-types, action-creators, reducers, selectors e dependência de connect ou provedores contextuais).
Bibliotecas modernas como Zustand adotam uma abordagem desacoplada baseada no padrão Publish-Subscribe (Pub/Sub) fora da árvore React:
1. O estado reside em uma store independente em memória JavaScript pura, sem exigir um <Provider> encapsulando a aplicação.
2. A sincronização com o React utiliza a API interna useSyncExternalStore (introduzida no React 18), prevenindo leituras inconsistentes (tearing) durante renderizações concorrentes.
3. Os componentes se inscrevem na store através de Seletores Granulares (useStore(state => state.property)), garantindo que o componente re-renderize exclusivamente quando a propriedade selecionada sofrer mutação.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph LR
subgraph ZustandStore ["Zustand Store (Fora da Árvore React)"]
State["Estado Central: { user, cart, theme }"]
Actions["Ações: { login(), addToCart() }"]
end
ZustandStore -->|Seletor: s => s.cart| CompCart["HeaderCartBadge (Re-renderiza apenas ao alterar cart)"]
ZustandStore -->|Seletor: s => s.theme| CompTheme["ThemeSwitcher (Re-renderiza apenas ao alterar theme)"]
CompCart -.->|Dispara Ação| Actions
style ZustandStore fill:#e3f2fd,stroke:#1565c0
style CompCart fill:#e8f5e9,stroke:#2e7d32
style CompTheme fill:#fff3e0,stroke:#e65100
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais:
- Zero Provider Overhead: A store pode ser acessada tanto dentro de componentes React quanto em funções utilitárias ou interceptores HTTP fora do React.
- Seletores de Estado Estritos: Redução drástica do número de re-renderizações em comparação com Context API.
- Middlewares Nativos: Suporte imediato a persistência em localStorage (persist) e depuração visual no Redux DevTools.
- Imutabilidade sem Verbosismo: Possibilidade de mutações declarativas simples sem necessidade de bibliotecas externas.
🛠️ 2. Implementação Prática em Zustand e Gerenciamento de Estado
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// use-cart-store.ts (Store Zustand com Seletor e Persistência)
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
interface CartItem { id: string; title: string; price: number; }
interface CartState {
items: CartItem[];
addItem: (item: CartItem) => void;
removeItem: (id: string) => void;
clearCart: () => void;
totalPrice: () => number;
}
export const useCartStore = create<CartState>()(
persist(
(set, get) => ({
items: [],
addItem: (item) => set((state) => ({ items: [...state.items, item] })),
removeItem: (id) => set((state) => ({ items: state.items.filter(i => i.id !== id) })),
clearCart: () => set({ items: [] }),
totalPrice: () => get().items.reduce((acc, curr) => acc + curr.price, 0)
}),
{ name: 'app-shopping-cart-storage' }
)
);
// Exemplo de consumo em componente:
// const itemsCount = useCartStore((state) => state.items.length); // Seletor granular!
💡 Análise Passo a Passo do Código
- Criação da Store Desacoplada:
create<CartState>()instancia a store tipada com estado e métodos em uma única estrutura limpa. - Middleware de Persistência:
persistarmazena e reidrata os dados automaticamente nolocalStoragedo navegador. - Assinatura Seletiva:
state.items.lengthgarante que o componente que exibe a contagem de itens não re-renderize se os preços forem atualizados.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aula 20 - Projeto Capstone: Aplicação React SPA Autônoma Completa 🏆
Objetivo Pedagógico
Objetivo: Desenvolvimento do projeto prático integrador em React 18, unindo TypeScript estrito, roteamento com React Router, Zustand, Suspense e design system.
📑 1. Fundamentos Teóricos & Análise Técnica
O Projeto Capstone da Especialização em React representa a consolidação profissional do estudante no framework mais utilizado pelo mercado de trabalho global. O objetivo é construir uma aplicação web autônoma, completa e pronta para produção (production-ready), aplicando as mais modernas convenções arquiteturais.
A aplicação a ser desenvolvida consiste em um Hub de Gestão de Projetos e Tarefas Colaborativas, contemplando:
1. Tipagem Estrita de Ponta a Ponta: Ausência total de tipos any, com interfaces para entidades de domínio, props e stores.
2. Arquitetura de Estado com Zustand: Gerenciamento desacoplado de autenticação, preferências de usuário e listas de tarefas.
3. Roteamento Moderno (React Router v6+): Uso de rotas declarativas baseadas em objetos (createBrowserRouter), com carregamento assíncrono via lazy e limites de erro (Error Boundaries).
4. Resiliência e Desempenho: Pontuação superior a 90 em métricas Core Web Vitals, com virtualização de listas em telas de grande volume de dados.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Entry["index.tsx (React 18 createRoot)"] --> Router["RouterProvider (createBrowserRouter)"]
Router --> ErrorB["ErrorBoundary (Captura Falhas de Render)"]
ErrorB --> Susp["Suspense Boundary (Skeleton Loaders)"]
Susp --> Pages["Rotas Lazy Loaded (Dashboard, Projetos, Config)"]
Pages --> Zustand["Zustand Global Stores (Auth & Projects)"]
Pages --> Services["Camada de Serviços HTTP (Axios/Fetch + Tipagem)"]
style Entry fill:#e3f2fd,stroke:#1565c0
style Router fill:#fff3e0,stroke:#e65100
style Zustand fill:#e8f5e9,stroke:#2e7d32
style Services fill:#f3e5f5,stroke:#7b1fa2
🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Separação de Responsabilidades: Camada de apresentação (UI), camada de lógica de estado (Hooks/Stores) e camada de dados (Services). - Resiliência a Falhas de Rede: Feedback visual amigável e captura de exceções em Error Boundaries sem quebrar a tela inteira. - Divisão Estratégica de Pacotes (Code-Splitting): Nenhum módulo da rota de administração é baixado na página de login. - Padrão de Componentes Limpos: Funções com menos de 100 linhas focadas estritamente em seu propósito visual.
🛠️ 2. Implementação Prática em React 18+, TypeScript e Zustand
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// router-app.tsx (Configuração do Router e Error Boundaries)
import React, { Suspense, lazy } from 'react';
import { createBrowserRouter, RouterProvider, Outlet } from 'react-router-dom';
const DashboardView = lazy(() => import('./views/DashboardView'));
const ProjectDetailsView = lazy(() => import('./views/ProjectDetailsView'));
const RootLayout = () => (
<div class="app-layout">
<header class="app-header"><h1>TaskManager Pro</h1></header>
<main>
<Suspense fallback={<div class="page-spinner">Carregando Módulo...</div>}>
<Outlet />
</Suspense>
</main>
</div>
);
export const router = createBrowserRouter([
{
path: '/',
element: <RootLayout />,
errorElement: <div class="error-screen">Ops! Ocorreu uma falha inesperada na rota.</div>,
children: [
{ index: true, element: <DashboardView /> },
{ path: 'projects/:id', element: <ProjectDetailsView /> }
]
}
]);
💡 Análise Passo a Passo do Código
- createBrowserRouter Nativo: Habilita o novo motor de roteamento orientado a loaders e actions do React Router.
- ErrorElement Centralizado: Captura exceções disparadas em rotas filhas e exibe tela de fallback graciosa.
- Outlet com Suspense: Permite que a casca da aplicação continue estável enquanto a subpágina é baixada pela rede.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto
Aulas do Curso
Bem-vindo à seção de aulas! Aqui você encontra todo o conteúdo do curso organizado em 5 módulos estruturados.
📚 Módulos do Curso
-
Módulo 1: Fundamentos & Bases ---
-
Módulo 2: Arquitetura & Conceitos Essenciais ---
-
Módulo 3: Engenharia & Aplicação Prática ---
-
Módulo 4: Software, Ferramentas & Padrões ---
-
Módulo 5: Tópicos Avançados & Projeto Capstone ---
Exercícios
🏋️ Exercícios do Curso
Lista completa das 20 unidades de exercicios organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Exercícios de Fixação – Aula 01 ✍️
Estes exercícios visam consolidar os conceitos iniciais sobre o ambiente React e a evolução do desenvolvimento web.
🟢 Nível: Básico (Conceitual)
Exercício 01: SPA vs MPA
Explique, com suas palavras, qual a principal diferença de experiência para o usuário final entre uma Multi-Page Application (MPA) tradicional e uma Single Page Application (SPA) moderna.
Exercício 02: O Papel do Node.js
O React é uma biblioteca que roda no navegador. Por que, então, precisamos instalar o Node.js em nossa máquina para desenvolver aplicações React profissionais?
🟡 Nível: Intermediário (Mão na Massa)
Exercício 03: Primeiros Passos com Vite
Utilizando o terminal, crie um novo projeto React chamado laboratorio-01 utilizando o Vite. Descreva quais pastas foram criadas na raiz do projeto e qual a função da pasta src.
Exercício 04: Estrutura do App.jsx
Abra o arquivo App.jsx do seu novo projeto e identifique onde o HTML (ou melhor, JSX) é retornado. Adicione um novo parágrafo <p> com seu nome e a data atual abaixo do título principal.
🔴 Nível: Desafio (Pesquisa e Aplicação)
Exercício 05: Hot Module Replacement (HMR)
Um dos grandes diferenciais do Vite é o HMR.
1. Pesquise e explique brevemente como essa tecnologia funciona.
2. Faça um teste: com o servidor de desenvolvimento rodando (npm run dev), altere o estilo CSS de um elemento no arquivo App.css e observe se a página recarrega inteira ou apenas aplica a mudança visual instantaneamente. Descreva sua observação.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Pesquise e explique brevemente como essa tecnologia funciona. **Resposta Comentada:** - **Fundamentação:** No contexto de **Introdução ao Frontend Moderno**, o conceito abordado (Pesquise e explique brevemente como essa tecnologia funciona.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Faça um teste **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Introdução ao Frontend Moderno**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda.Exercícios de Fixação – Aula 02 🧱
Consolide seus conhecimentos sobre JSX e a criação de Componentes Reutilizáveis.
🟢 Nível: Básico
Exercício 01: Sintaxe JSX
Corrija o código abaixo para que ele seja um JSX válido:
function MeuComponente() {
return (
<h1 class="sucesso">Título</h1>
<p>Descrição</p>
<img src="foto.jpg">
)
}
Exercício 02: Letra Maiúscula
Por que o código <botao>Clique aqui</botao> pode não funcionar como esperado se o objetivo for renderizar um componente React personalizado chamado Botao?
🟡 Nível: Intermediário
Exercício 03: Passando Props
Crie um componente chamado Equipe que recebe uma prop quantidade. O componente deve exibir a frase: "Nossa equipe possui [quantidade] especialistas". No seu App.jsx, chame este componente duas vezes com valores diferentes.
Exercício 04: Destructuring de Props
Reescreva a função abaixo utilizando a técnica de destructuring para capturar nome e idade diretamente nos parâmetros da função:
function Perfil(props) {
return (
<div>
<h3>Nome: {props.nome}</h3>
<p>Idade: {props.idade}</p>
</div>
);
}
🔴 Nível: Desafio
Exercício 05: Composição de Cards
Crie um componente chamado VideoCard. Ele deve receber as props: thumbnail, titulo, canal e visualizacoes.
1. Estilize o card usando CSS simples (pode ser no App.css).
2. Tente usar o componente dentro de uma lista (mesmo que estática por enquanto) no App.jsx.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Estilize o card usando CSS simples (pode ser no `App.css`). **Resposta Comentada:** - **Fundamentação:** No contexto de **Fundamentos: JSX, Componentes e Props**, o conceito abordado (Estilize o card usando CSS simples (pode ser no `App.css`).) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Tente usar o componente dentro de uma lista (mesmo que estática por enquanto) no `App.jsx`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Fundamentos: JSX, Componentes e Props**, o conceito abordado (Tente usar o componente dentro de uma lista (mesmo que estática por enquanto) no `App.jsx`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 03 🎣
Aprenda a lidar com o estado e a reatividade do React através destes exercícios práticos sobre o useState.
🟢 Nível: Básico
Exercício 01: Contador de Cliques
Crie um componente chamado Contador. Utilize o useState para iniciar um valor em 0. Exiba esse valor na tela e adicione dois botões: um para incrementar (+1) e outro para decrementar (-1).
Exercício 02: Campo de Texto (Input)
Crie um componente que tenha um campo de input de texto. Utilize o estado para capturar o que o usuário digita e exiba em tempo real logo abaixo em um parágrafo: "Você está digitando: [valor do input]".
🟡 Nível: Intermediário
Exercício 03: Mostrar/Esconder (Toggle)
Crie um componente que exiba um título "Informação Secreta". Adicione um botão "Mostrar Detalhes". Quando clicado, ele deve exibir um parágrafo com um texto qualquer. Quando clicado novamente, o texto deve sumir.
Exercício 04: Lista de Tarefas Simples
Crie um estado que comece como uma string vazia (para o input) e outro estado que seja um array vazio (para a lista).
1. Ao clicar em um botão "Adicionar", pegue o texto do input e adicione ao array da lista.
2. Exiba a lista de tarefas usando .map().
🔴 Nível: Desafio
Exercício 05: Simulador de Semáforo
Crie um componente que simule um semáforo. 1. O estado deve guardar a cor atual ("verde", "amarelo" ou "vermelho"). 2. Crie um botão "Próximo Passo" que altera a cor seguindo a ordem lógica. 3. Altere o estilo visual de três círculos (divs com border-radius) baseado no estado atual (ex: se o estado for "verde", apenas o círculo de cima fica verde, os outros ficam cinzas).
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Ao clicar em um botão "Adicionar", pegue o texto do input e adicione ao array da lista. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks I: useState e Estado Local**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Exiba a lista de tarefas usando `.map()`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks I: useState e Estado Local**, o conceito abordado (Exiba a lista de tarefas usando `.map()`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: O estado deve guardar a cor atual ("verde", "amarelo" ou "vermelho"). **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks I: useState e Estado Local**, o conceito abordado (O estado deve guardar a cor atual ("verde", "amarelo" ou "vermelho").) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Crie um botão "Próximo Passo" que altera a cor seguindo a ordem lógica. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks I: useState e Estado Local**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Altere o estilo visual de três círculos (divs com border **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks I: useState e Estado Local**, o conceito abordado (Altere o estilo visual de três círculos (divs com border) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 04 🔄
Exercício 01: Mensagem de Boas-vindas
Crie um componente que use useEffect para exibir um alert("Bem-vindo ao sistema!") apenas uma vez, quando a página for carregada pela primeira vez.
Exercício 02: Título do Documento Reativo
Crie um estado contador. Use o useEffect para que, toda vez que o contador mudar, o título da aba do navegador (document.title) seja atualizado para: "Cliques: [valor]".
Exercício 03: Relógio Digital
Crie um estado hora e use useEffect com setInterval para atualizar a hora a cada segundo.
Atenção: Não esqueça de retornar uma função de limpeza para dar o clearInterval quando o componente for destruído.
🟡 Nível: Intermediário
Exercício 04: Buscador de CEP
- Crie um input para o CEP.
- Escreva um
useEffectque dispara uma busca na APIhttps://viacep.com.br/ws/[cep]/json/sempre que o CEP digitado completar 8 dígitos. - Exiba o endereço (Rua, Bairro, Cidade) na tela.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Crie um input para o CEP. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks II: useEffect e Ciclo de Vida**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Escreva um `useEffect` que dispara uma busca na API `https **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks II: useEffect e Ciclo de Vida**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Exiba o endereço (Rua, Bairro, Cidade) na tela. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks II: useEffect e Ciclo de Vida**, o conceito abordado (Exiba o endereço (Rua, Bairro, Cidade) na tela.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 05 🎨
Exercício 01: CSS Modules
Crie um componente Botao e um arquivo Botao.module.css.
1. Aplique uma classe que mude a cor de fundo para "teal" e aumente o padding.
2. Verifique no navegador como o nome da classe foi alterado para evitar conflitos.
Exercício 02: Styled Components Básico
Instale o styled-components e crie um componente chamado Titulo que seja um h1 com cor azul, fonte em itálico e margem inferior de 20px.
Exercício 03: Estilo Dinâmico (Props)
Crie um componente Box usando Styled Components que recebe uma prop bg. A cor de fundo da div deve ser o valor passado nessa prop. Teste criando três boxes com cores diferentes no App.jsx.
🔴 Nível: Desafio
Exercício 04: Botão Tematizável
Crie um componente BotaoCoringa usando Styled Components que muda completamente de estilo (cores, bordas, sombras) baseado em uma prop tipo (que pode ser 'primario', 'perigo' ou 'sucesso').
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Aplique uma classe que mude a cor de fundo para "teal" e aumente o padding. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Estilização: CSS Modules e Styled Components**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Verifique no navegador como o nome da classe foi alterado para evitar conflitos. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Estilização: CSS Modules e Styled Components**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda.Exercícios de Fixação – Aula 06 📝
Exercício 01: Setup do Form
Instale o react-hook-form e crie um formulário simples com um único campo "Nome".
1. Use a função handleSubmit para capturar o envio.
2. Exiba o nome em um alerta ou no console.
Exercício 02: Validação Required
Adicione uma regra de validação que impeça o envio do formulário se o campo "E-mail" estiver vazio.
1. Exiba uma mensagem de erro abaixo do input: "O e-mail é obrigatório".
2. Use o objeto errors do useForm.
🟡 Nível: Intermediário
Exercício 03: Validação de Senha
Crie um campo "Senha" e "Confirmar Senha". 1. A senha deve ter entre 8 e 20 caracteres. 2. (Bônus) Tente validar se as duas senhas são iguais antes de permitir o envio.
Exercício 04: Select Dinâmico
Crie um campo select com as opções: "Dúvida", "Sugestão", "Reclamação".
Certifique-se de que o valor selecionado seja capturado corretamente pelo react-hook-form.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Use a função `handleSubmit` para capturar o envio. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Formulários e Validação (React Hook Form)**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Exiba o nome em um alerta ou no console. **Resposta Comentada:** - **Fundamentação:** No contexto de **Formulários e Validação (React Hook Form)**, o conceito abordado (Exiba o nome em um alerta ou no console.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Exiba uma mensagem de erro abaixo do input **Resposta Comentada:** - **Fundamentação:** No contexto de **Formulários e Validação (React Hook Form)**, o conceito abordado (Exiba uma mensagem de erro abaixo do input) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Use o objeto `errors` do `useForm`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Formulários e Validação (React Hook Form)**, o conceito abordado (Use o objeto `errors` do `useForm`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: A senha deve ter entre 8 e 20 caracteres. **Resposta Comentada:** - **Fundamentação:** No contexto de **Formulários e Validação (React Hook Form)**, o conceito abordado (A senha deve ter entre 8 e 20 caracteres.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: (Bônus) Tente validar se as duas senhas são iguais antes de permitir o envio. **Resposta Comentada:** - **Fundamentação:** No contexto de **Formulários e Validação (React Hook Form)**, o conceito abordado ((Bônus) Tente validar se as duas senhas são iguais antes de permitir o envio.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 07 🗺️
Exercício 01: Setup das Rotas
Crie um projeto novo e configure o BrowserRouter.
1. Crie duas rotas: / (Home) e /contato (Contato).
2. Crie um componente de Navegação com <Link> para ambas.
3. Certifique-se de que a mudança de URL não recarrega a página.
Exercício 02: Rota 404 (Not Found)
Adicione uma rota coringa (path="*") que exiba uma mensagem amigável: "Ops! Essa página não existe. [Voltar para Home]". Teste digitando uma URL inexistente no navegador.
Exercício 03: Link Ativo com CSS
Use o <NavLink> no seu menu de navegação.
1. Crie uma classe CSS chamada .active no seu App.css.
2. Essa classe deve deixar o link em negrito e com uma cor de destaque quando for a página atual.
🟡 Nível: Intermediário
Exercício 04: Redirecionamento Programático
Crie um formulário simples na página de Contato.
1. Use o hook useNavigate.
2. Após o usuário clicar em "Enviar", simule um envio e use o navigate("/") para mandá-lo de volta para a Home automaticamente.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Crie duas rotas **Resolução e Implementação:**// Solução de referência para: Crie duas rotas
function solucaoExercicio() {
console.log("Executando validação de: React Router: Navegação SPA ️");
return true;
}
solucaoExercicio();
// Solução de referência para: Crie um componente de Navegação com `<Link>` para ambas.
function solucaoExercicio() {
console.log("Executando validação de: React Router: Navegação SPA ️");
return true;
}
solucaoExercicio();
Exercícios de Fixação – Aula 08 📡
Exercício 01: Fetch Básico
Crie um componente que use useEffect e a função fetch para buscar uma piada aleatória na API: https://official-joke-api.appspot.com/random_joke. Exiba a piada (setup) e a resposta (punchline) na tela.
Exercício 02: Introdução ao Axios
Instale o Axios (npm install axios) e refaça o exercício anterior utilizando o axios.get(). Observe a diferença na forma como os dados são recebidos.
🟡 Nível: Intermediário
Exercício 03: Lista de Fotos (Placeholder)
- Use a API
https://jsonplaceholder.typicode.com/photos. - Liste as primeiras 10 fotos da API.
- Exiba o título e a imagem em miniatura (
thumbnailUrl). - Use o Axios e tente usar uma função
async/await.
Exercício 04: Tratamento de Erro Visual
Modifique o exercício anterior para que ele exiba uma mensagem de erro na tela caso você troque a URL da API para algo incorreto. Use o bloco try/catch.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Use a API `https **Resposta Comentada:** - **Fundamentação:** No contexto de **Consumo de APIs: Fetch e Axios**, o conceito abordado (Use a API `https) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Liste as primeiras 10 fotos da API. **Resposta Comentada:** - **Fundamentação:** No contexto de **Consumo de APIs: Fetch e Axios**, o conceito abordado (Liste as primeiras 10 fotos da API.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Exiba o título e a imagem em miniatura (`thumbnailUrl`). **Resposta Comentada:** - **Fundamentação:** No contexto de **Consumo de APIs: Fetch e Axios**, o conceito abordado (Exiba o título e a imagem em miniatura (`thumbnailUrl`).) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Use o Axios e tente usar uma função `async/await`. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Consumo de APIs: Fetch e Axios**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda.Exercícios de Fixação – Aula 09 🌐
Exercício 01: Criando um Contexto de Tema
- Crie um arquivo
ThemeContext.js. - Configure um contexto que guarde o valor
'light'ou'dark'. - Use o
Providerpara envolver sua aplicação.
Exercício 02: Consumindo o Tema
Crie um componente Cabecalho que use o hook useContext para ler o tema atual e mudar a cor de fundo do header (ex: preto para dark, branco para light).
🟡 Nível: Intermediário
Exercício 03: Alterando o Contexto
Adicione uma função toggleTheme ao seu contexto. No componente Configuracoes, crie um botão que, ao ser clicado, alterna o tema globalmente. Observe como todos os componentes que usam o contexto mudam de cor ao mesmo tempo.
Exercício 04: Contexto de Autenticação (Simulado)
- Crie um
AuthContextque guarde um objetousuario(inicialmentenull). - Crie uma função
loginque define um objeto{ nome: 'Admin', logado: true }. - Na Navbar, mostre "Bem-vindo, Admin" se houver usuário, ou um botão "Entrar" se estiver null.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Crie um arquivo `ThemeContext.js`. **Resolução e Implementação:**// Solução de referência para: Crie um arquivo `ThemeContext.js`.
function solucaoExercicio() {
console.log("Executando validação de: Context API: Estado Global Simples");
return true;
}
solucaoExercicio();
Exercícios de Fixação – Aula 10 🏗️
Exercício 01: useRef e Foco Automático
Crie um componente que tenha um formulário de login (E-mail e Senha).
1. Ao carregar a página, o campo de E-mail deve receber foco automaticamente usando useRef.
2. Adicione um botão "Limpar e Focar" que limpa os campos e volta o cursor para o e-mail.
Exercício 02: useMemo para Filtros
Crie uma lista de nomes (pelo menos 20 nomes).
1. Adicione um input de busca.
2. Use o useMemo para filtrar a lista conforme o usuário digita.
3. Coloque um console.log dentro do filtro para provar que ele não roda sem necessidade.
🟡 Nível: Intermediário
Exercício 03: useCallback e Componente Memoizado
- Crie um componente filho que recebe uma função via prop.
- Memoize o filho com
React.memo. - No pai, use o
useCallbackpara passar a função para o filho. - Verifique se o filho para de renderizar quando outros estados do pai mudam.
Exercício 04: Contador Silencioso com useRef
Crie um botão que incrementa uma variável salva dentro de um useRef.
1. Exiba o valor atual no console.
2. Verifique que o valor muda, mas o número na tela (se você usar um h1 estático) não é atualizado.
3. Adicione um botão de "Forçar Render" (usando um useState bobo) e veja o valor do ref aparecendo.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Ao carregar a página, o campo de E **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Ao carregar a página, o campo de E) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Adicione um botão "Limpar e Focar" que limpa os campos e volta o cursor para o e **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Adicione um botão "Limpar e Focar" que limpa os campos e volta o cursor para o e) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Adicione um input de busca. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Adicione um input de busca.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Use o `useMemo` para filtrar a lista conforme o usuário digita. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Use o `useMemo` para filtrar a lista conforme o usuário digita.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Coloque um `console.log` dentro do filtro para provar que ele não roda sem necessidade. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Coloque um `console.log` dentro do filtro para provar que ele não roda sem necessidade.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Crie um componente filho que recebe uma função via prop. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks Avançados: useMemo, useCallback e useRef ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Memoize o filho com `React.memo`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Memoize o filho com `React.memo`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: No pai, use o `useCallback` para passar a função para o filho. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Hooks Avançados: useMemo, useCallback e useRef ️**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 4: Verifique se o filho para de renderizar quando outros estados do pai mudam. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Verifique se o filho para de renderizar quando outros estados do pai mudam.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Exiba o valor atual no console. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Exiba o valor atual no console.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Verifique que o valor muda, mas o número na tela (se você usar um h1 estático) não é atualizado. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Verifique que o valor muda, mas o número na tela (se você usar um h1 estático) não é atualizado.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Adicione um botão de "Forçar Render" (usando um useState bobo) e veja o valor do ref aparecendo. **Resposta Comentada:** - **Fundamentação:** No contexto de **Hooks Avançados: useMemo, useCallback e useRef ️**, o conceito abordado (Adicione um botão de "Forçar Render" (usando um useState bobo) e veja o valor do ref aparecendo.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 11 🚀
Exercício 01: React.memo
Crie um componente CardEstatico que recebe apenas um título.
1. No componente pai, crie um contador que atualiza a cada segundo.
2. Use o React.memo no CardEstatico para garantir que ele não renderize novamente em cada segundo, já que o título não muda.
Exercício 02: Lazy Loading de Rotas
No seu projeto com React Router:
1. Transforme as páginas Sobre e Contato em componentes carregados via lazy.
2. Use o Suspense para mostrar a mensagem "Carregando Página..." enquanto elas são baixadas.
🟡 Nível: Intermediário
Exercício 03: Diferindo o Carregamento de Imagens
Crie uma galeria de 10 imagens.
1. Adicione o atributo loading="lazy" em todas elas.
2. Use imagens de alta resolução do Unsplash.
3. Observe no Inspetor de Elementos (aba Network) que as imagens só são baixadas quando você faz scroll e se aproxima delas.
Exercício 04: Análise com Profiler
- Abra o React DevTools no seu navegador.
- Vá na aba "Profiler" e clique em gravar.
- Realize algumas interações na sua lista filtrável da aula anterior.
- Pare a gravação e identifique qual componente está levando mais tempo para renderizar.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: No componente pai, crie um contador que atualiza a cada segundo. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Performance: React.memo e Lazy Loading**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Use o `React.memo` no `CardEstatico` para garantir que ele não renderize novamente em cada segundo, já que o título não muda. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Use o `React.memo` no `CardEstatico` para garantir que ele não renderize novamente em cada segundo, já que o título não muda.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Transforme as páginas `Sobre` e `Contato` em componentes carregados via `lazy`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Transforme as páginas `Sobre` e `Contato` em componentes carregados via `lazy`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Use o `Suspense` para mostrar a mensagem "Carregando Página..." enquanto elas são baixadas. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Use o `Suspense` para mostrar a mensagem "Carregando Página..." enquanto elas são baixadas.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Adicione o atributo `loading="lazy"` em todas elas. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Adicione o atributo `loading="lazy"` em todas elas.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Use imagens de alta resolução do Unsplash. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Use imagens de alta resolução do Unsplash.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Observe no Inspetor de Elementos (aba Network) que as imagens só são baixadas quando você faz scroll e se aproxima delas. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Observe no Inspetor de Elementos (aba Network) que as imagens só são baixadas quando você faz scroll e se aproxima delas.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Abra o React DevTools no seu navegador. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Abra o React DevTools no seu navegador.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Vá na aba "Profiler" e clique em gravar. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Vá na aba "Profiler" e clique em gravar.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Realize algumas interações na sua lista filtrável da aula anterior. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Realize algumas interações na sua lista filtrável da aula anterior.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 4: Pare a gravação e identifique qual componente está levando mais tempo para renderizar. **Resposta Comentada:** - **Fundamentação:** No contexto de **Performance: React.memo e Lazy Loading**, o conceito abordado (Pare a gravação e identifique qual componente está levando mais tempo para renderizar.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 12 🏪
Exercício 01: Configurando a Store
Instale o Redux Toolkit e o React Redux. Crie um arquivo store.js e configure uma store vazia. Envolva sua aplicação no <Provider store={store}>.
Exercício 02: Meu Primeiro Slice
Crie um slice chamado userSlice.
1. Estado inicial: { name: 'Visitante', isLogged: false }.
2. Adicione uma action login que muda o nome para 'Ricardo' e isLogged para true.
3. Adicione uma action logout que reseta os valores.
🟡 Nível: Intermediário
Exercício 03: useSelector e useDispatch
No seu componente Header:
1. Use o useSelector para exibir o nome do usuário que está na store.
2. No botão de login, use o useDispatch para disparar a action login.
3. Verifique se o nome muda na aplicação toda sem usar Context ou Props.
Exercício 04: Slice de Lista (Favoritos)
Crie um favoritesSlice que guarda um array de strings (IDs de filmes).
1. Action addFavorite: Adiciona um ID ao array.
2. Action removeFavorite: Remove um ID do array.
3. Exiba o contador de favoritos no seu menu de navegação.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Estado inicial **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Estado inicial) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Adicione uma action `login` que muda o nome para 'Ricardo' e `isLogged` para true. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Adicione uma action `login` que muda o nome para 'Ricardo' e `isLogged` para true.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Adicione uma action `logout` que reseta os valores. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Adicione uma action `logout` que reseta os valores.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Use o `useSelector` para exibir o nome do usuário que está na store. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Use o `useSelector` para exibir o nome do usuário que está na store.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: No botão de login, use o `useDispatch` para disparar a action `login`. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (No botão de login, use o `useDispatch` para disparar a action `login`.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Verifique se o nome muda na aplicação toda sem usar Context ou Props. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Verifique se o nome muda na aplicação toda sem usar Context ou Props.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Action `addFavorite` **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Estado Global Avançado: Redux Toolkit**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 2: Action `removeFavorite` **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Estado Global Avançado: Redux Toolkit**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 3: Exiba o contador de favoritos no seu menu de navegação. **Resposta Comentada:** - **Fundamentação:** No contexto de **Estado Global Avançado: Redux Toolkit**, o conceito abordado (Exiba o contador de favoritos no seu menu de navegação.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Exercícios de Fixação – Aula 13 🧪
Exercício 01: Primeiro Teste
Instale o Vitest e o React Testing Library.
1. Crie um componente Titulo que apenas exibe um h1 com o texto "Olá Mundo".
2. Escreva um teste que verifica se o texto "Olá Mundo" está presente no documento.
Exercício 02: Testando Props
Crie um componente Card que recebe a prop nome.
1. Escreva um teste que passa um nome específico e verifica se ele é renderizado corretamente.
2. Use o screen.getByText com uma Expressão Regular (Regex) para ser insensível a maiúsculas/minúsculas.
🟡 Nível: Intermediário
Exercício 03: Testando Interação (Clique)
Crie um componente Contador.
1. O valor inicial deve ser 0.
2. Ao clicar no botão "Aumentar", o valor deve ir para 1.
3. Use o fireEvent.click ou userEvent.click para simular o clique no teste.
Exercício 04: Testando Estado Condicional
Crie um componente Mensagem que tem um botão de "Mostrar/Esconder".
1. Escreva um teste que verifica que a mensagem está oculta por padrão.
2. Simule o clique e verifique se a mensagem apareceu.
3. Verifique se ela some ao clicar novamente.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Crie um componente `Titulo` que apenas exibe um `h1` com o texto "Olá Mundo". **Resolução e Implementação:**// Solução de referência para: Crie um componente `Titulo` que apenas exibe um `h1` com o texto "Olá Mundo".
function solucaoExercicio() {
console.log("Executando validação de: Testes Unitários: Vitest e React Testing Library");
return true;
}
solucaoExercicio();
// Solução de referência para: Escreva um teste que verifica se o texto "Olá Mundo" está presente no documento.
function solucaoExercicio() {
console.log("Executando validação de: Testes Unitários: Vitest e React Testing Library");
return true;
}
solucaoExercicio();
Exercícios de Fixação – Aula 14 ☁️
Exercício 01: Configuração do Projeto Cloud
Acesse o console do Firebase ou do Supabase. 1. Crie um novo projeto chamado "MeuProjetoReact". 2. Ative o Banco de Dados (Firestore ou PostreSQL). 3. Copie as chaves de configuração.
Exercício 02: Inserção de Dados
No seu componente React:
1. Instale o SDK (ex: npm install firebase).
2. Crie uma função que salve um objeto { nome: 'Teste', data: new Date() } no banco ao clicar em um botão.
3. Verifique no console da nuvem se o dado apareceu.
🟡 Nível: Intermediário
Exercício 03: Listagem em Tempo Real
- Use a função de escuta (ex:
onSnapshotno Firebase ousubscribeno Supabase). - Exiba uma lista de itens vinda do banco.
- Peça para um colega adicionar um item no banco e veja se ele aparece na sua tela sem você dar Recarregar.
Exercício 04: Upload de Imagem (Storage)
Configure o Storage na sua plataforma cloud.
1. Crie um campo de input do tipo file.
2. Implemente a lógica para subir o arquivo e exibir a URL da imagem na tela após o sucesso.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Crie um novo projeto chamado "MeuProjetoReact". **Resolução e Implementação:**// Solução de referência para: Crie um novo projeto chamado "MeuProjetoReact".
function solucaoExercicio() {
console.log("Executando validação de: Integração com Backend: Firebase e Supabase ☁️");
return true;
}
solucaoExercicio();
// Solução de referência para: Crie uma função que salve um objeto `{ nome
function solucaoExercicio() {
console.log("Executando validação de: Integração com Backend: Firebase e Supabase ☁️");
return true;
}
solucaoExercicio();
// Solução de referência para: Use a função de escuta (ex
function solucaoExercicio() {
console.log("Executando validação de: Integração com Backend: Firebase e Supabase ☁️");
return true;
}
solucaoExercicio();
Exercícios de Fixação – Aula 15 🚀
Exercício 01: Meta Tags de Redes Sociais
No arquivo index.html do seu projeto final:
1. Altere o <title> para o nome do seu projeto.
2. Adicione uma meta tag description.
3. Adicione as tags Open Graph (og:title e og:description) para que o link fique bonito ao ser compartilhado no Discord ou WhatsApp.
Exercício 02: Criando a Conta de Deploy
- Crie uma conta na Vercel ou Netlify usando seu login do GitHub.
- Conecte seu repositório do curso.
🟡 Nível: Intermediário
Exercício 03: Lighthouse Check
- No Chrome, abra seu site (mesmo que localmente).
- Vá em Inspecionar -> Lighthouse.
- Gere um relatório focado em "Performance" e "SEO".
- Tente corrigir pelo menos um item sugerido (ex: adicionar
altem uma imagem ou mudar o contraste de uma cor).
Exercício 04: PWA Básico
- No seu projeto Vite, instale o plugin
vite-plugin-pwa. - Configure um manifesto básico com nome, cor e um ícone.
- Teste se, ao rodar o projeto, o navegador exibe o ícone de "Instalar Aplicativo" na barra de endereços.
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Altere o `// Solução de referência para: Adicione uma meta tag `description`.
function solucaoExercicio() {
console.log("Executando validação de: PWA e Deploy: Colocando no Ar!");
return true;
}
solucaoExercicio();
Exercícios de Fixação – Aula 16 🏆
Exercício 01: Definição de Escopo
- Escolha o tema do seu projeto final.
- Liste as 5 funcionalidades principais (Features) que seu app terá.
- Desenhe um rascunho (Wireframe) das 3 telas principais: Home, Dashboard e Detalhes.
Exercício 02: Configuração da Store Global
- Desenhe a estrutura do seu estado global.
- Quais dados precisam estar no Redux? Quais podem ficar no useState local?
- Crie os arquivos iniciais da sua Store.
🟡 Nível: Intermediário
Exercício 03: Checklist de Performance
Antes de finalizar o projeto, verifique:
1. Todas as imagens possuem loading="lazy"?
2. Existem componentes pesados que poderiam usar React.memo?
3. As rotas estão usando lazy e Suspense?
Exercício 04: Preparação do Pitch
Escreva um pequeno texto (ou tópicos) para sua apresentação final: 1. Qual foi o maior "bug" que você resolveu durante o curso? 2. Como você organizou as pastas do seu projeto final? 3. Se tivesse mais uma semana, o que você adicionaria de novo?
📚 Gabarito e Soluções Comentadas
Gabarito Explicado
### Questão 1: Escolha o tema do seu projeto final. **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Escolha o tema do seu projeto final.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Liste as 5 funcionalidades principais (Features) que seu app terá. **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Liste as 5 funcionalidades principais (Features) que seu app terá.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Desenhe um rascunho (Wireframe) das 3 telas principais **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Desenhe um rascunho (Wireframe) das 3 telas principais) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Desenhe a estrutura do seu estado global. **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Desenhe a estrutura do seu estado global.) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Quais dados precisam estar no Redux? Quais podem ficar no useState local? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Quais dados precisam estar no Redux? Quais podem ficar no useState local?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Crie os arquivos iniciais da sua Store. **Resolução e Implementação:** - **Explicação:** A solução atende diretamente aos requisitos de **Projeto Final: Dashboard Completo**, garantindo tipagem consistente, legibilidade e tratamento de casos de borda. ### Questão 1: Todas as imagens possuem `loading="lazy"`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Todas as imagens possuem `loading="lazy"`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Existem componentes pesados que poderiam usar `React.memo`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Existem componentes pesados que poderiam usar `React.memo`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: As rotas estão usando `lazy` e `Suspense`? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (As rotas estão usando `lazy` e `Suspense`?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 1: Qual foi o maior "bug" que você resolveu durante o curso? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Qual foi o maior "bug" que você resolveu durante o curso?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 2: Como você organizou as pastas do seu projeto final? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Como você organizou as pastas do seu projeto final?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais. ### Questão 3: Se tivesse mais uma semana, o que você adicionaria de novo? **Resposta Comentada:** - **Fundamentação:** No contexto de **Projeto Final: Dashboard Completo**, o conceito abordado (Se tivesse mais uma semana, o que você adicionaria de novo?) é essencial para assegurar que os requisitos do sistema sejam estruturados de forma padronizada e escalável. - **Justificativa Técnica:** A abordagem recomendada prioriza baixo acoplamento, alta coesão e facilidade de manutenção em ambientes de produção, evitando retrabalho e inconsistências operacionais.Projetos
🚀 Projetos do Curso
Lista completa das 20 unidades de projetos organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
Projeto 01 – Meu Primeiro Universo React 🚀
Neste projeto inicial, você vai configurar seu ambiente de desenvolvimento profissional e criar sua primeira aplicação React personalizada.
🎯 Objetivo
Configurar o ambiente (Node, VS Code, Vite), rodar a aplicação e realizar as primeiras modificações estruturais no código.
🛠️ Requisitos
- Node.js LTS instalado.
- VS Code com as extensões:
- ES7+ React/Redux/React-Native snippets.
- Prettier - Code formatter.
📝 Passo a Passo
1. Criação do Boilerplate
No seu terminal, navegue até a pasta onde guarda seus cursos e execute:
2. Instalação e Execução
Entre na pasta e instale os pacotes:
Acesse o link gerado (geralmente http://localhost:5173).
3. Personalização
Abra o projeto no VS Code e faça as seguintes alterações:
- No arquivo App.jsx, remova todo o conteúdo dentro da return ( ... ) do componente App.
- Crie uma estrutura simples com um <h1> (Seu Nome), um <h2> (Sua Profissão/Objetivo) e uma lista <ul> com 3 tecnologias que você deseja aprender neste curso.
✅ Critérios de Entrega
- O projeto deve estar rodando sem erros no console.
- A interface deve exibir as informações personalizadas solicitadas no passo 3.
- O aluno deve ser capaz de explicar o que o comando
npm run devfaz.
Projeto Concluído
Parabéns! Você acaba de quebrar a barreira inicial e já tem um ambiente React funcional e pronto para as próximas aulas.
Projeto 02 – Galeria de Componentes Dinâmicos 🎨
Neste projeto, você vai aplicar a componentização para criar uma galeria de produtos (como um e-commerce simplificado).
🎯 Objetivo
Desenvolver componentes reutilizáveis, organizar o projeto em pastas e utilizar props para exibir diferentes conteúdos na mesma estrutura visual.
🛠️ Requisitos
- Uso de Props para passar dados.
- Organização de componentes em uma pasta própria (
src/components). - Uso de CSS para estilização básica.
📝 Passo a Passo
1. Preparação
No seu projeto criado na Aula 01, crie uma pasta chamada components dentro da src.
2. Criação do Componente Item
Crie o arquivo src/components/CardProduto.jsx. Ele deve exibir:
- Uma imagem (pode usar https://via.placeholder.com/150).
- Nome do produto.
- Preço.
- Um botão "Comprar".
3. Implementação
No arquivo App.jsx, importe o CardProduto e chame-o pelo menos 4 vezes, simulando produtos diferentes (ex: Teclado, Mouse, Monitor, Headset).
4. Estilização
Crie um arquivo Card.css (ou use o App.css) para garantir que os cards fiquem um ao lado do outro e tenham uma borda ou sombra elegante.
✅ Critérios de Entrega
- O código deve estar limpo e sem avisos no terminal.
- A interface deve mostrar os 4 produtos diferentes de forma organizada.
- O aluno deve demonstrar que as informações mudam através das props, sem duplicar o código HTML inteiro do card.
Dica: Imagens Reais
Você pode usar o site Unsplash Source para carregar imagens reais de tecnologia nos seus cards!
Projeto 03 – O Gestor de Finanças Pessoal 💰
Neste projeto, você vai aplicar o useState para criar um mini sistema de controle financeiro que permite adicionar ganhos e gastos.
🎯 Objetivo
Gerenciar múltiplos estados, lidar com arrays no React e criar uma interface reativa que responde a inputs do usuário.
🛠️ Requisitos
- Uso de useState para o saldo total.
- Uso de useState para a lista de transações (array).
- Renderização de listas com
.map(). - Estilização condicional (ex: valores negativos em vermelho).
📝 Passo a Passo
1. Estrutura do Estado
No seu App.jsx, crie dois estados principais:
- transacoes: Um array de objetos { id, texto, valor }.
- inputTexto e inputValor: Para capturar os dados do formulário.
2. Formulário de Entrada
Crie um formulário com dois campos e um botão "Adicionar Transação".
- Dica: Use o evento onChange para atualizar os estados dos inputs.
3. Lógica de Adição
Crie uma função adicionarTransacao que:
- Evita o comportamento padrão do form (e.preventDefault()).
- Cria um novo objeto de transação.
- Usa o spread operator para adicionar ao array: setTransacoes([...transacoes, novaTransacao]).
4. Exibição e Saldo
- Crie um componente
Resumoque calcula a soma de todas as transações e exibe o saldo atual. - Liste as transações abaixo do formulário.
✅ Critérios de Entrega
- O saldo total deve atualizar automaticamente ao adicionar uma nova transação.
- A lista deve exibir o nome e o valor de cada item.
- O código não deve realizar mutações diretas no array (usar funções que retornam novos arrays).
Bônus
Adicione um botão "Remover" em cada transação que filtre o array para deletar o item selecionado!
Projeto 04 – Explorador de Repositórios do GitHub 🐙
Neste projeto, você vai construir uma aplicação real que consome a API oficial do GitHub para listar os projetos de qualquer usuário.
🎯 Objetivo
Dominar o consumo de APIs (Fetch), manipular estados assíncronos e utilizar o useEffect para sincronização de dados.
🛠️ Requisitos
- Uso de useEffect para busca inicial.
- Uso de fetch para chamada de API.
- Gerenciamento de estados de:
loading,erroredata. - Interface organizada para exibir os repositórios.
📝 Passo a Passo
1. Preparação da API
A URL base será: https://api.github.com/users/[NOME_USUARIO]/repos.
2. Estados Iniciais
No seu componente principal, crie:
3. Chamada Assíncrona
Crie uma função carregarRepositorios dentro do useEffect.
- Use try/catch para capturar erros de rede.
- Converta a resposta para JSON.
- Salve no estado repos e mude loading para false.
4. Interface Reativa
- Exiba um spinner ou texto "Carregando..." enquanto o estado for true.
- Use o
.mappara listarrepo.nameerepo.html_url. - Estilize a lista usando CSS Grid ou Flexbox.
✅ Critérios de Entrega
- A página deve carregar repositórios reais do seu próprio GitHub ao abrir.
- Deve haver um tratamento básico de erro (ex: Usuário não encontrado).
- A lista deve ser clicável e levar para o repositório original.
Limite de Taxa
A API do GitHub tem um limite de requisições por hora para usuários não autenticados. Se parar de funcionar, aguarde alguns minutos!
Projeto 05 – Landing Page Tematizável 🌈
Nesta aula, você vai construir uma página que demonstra o poder da estilização dinâmica com Styled Components.
🎯 Objetivo
Implementar um sistema de "Troca de Temas" (Theming) básico e utilizar componentes estilizados que reagem a props.
🛠️ Requisitos
- Uso de Styled Components.
- Implementação de um botão que alterna entre tema "Claro" e "Escuro" (ou outros temas criativos).
- Nenhum arquivo
.cssexterno deve ser usado, apenas CSS-in-JS.
📝 Passo a Passo
1. Instalação
No terminal:
2. Criação dos Componentes Estilizados
Crie um arquivo src/styles.js e defina:
- Container: Uma div que ocupa a tela toda com transição suave de cor.
- BotaoTema: Um botão que muda de estilo visual dependendo do tema.
- Texto: Um parágrafo estilizado.
3. Lógica de Alternância
No App.jsx, use um useState para controlar qual tema está ativo.
Passe essa informação via props para seus componentes estilizados.
4. Conteúdo da Página
Adicione uma seção de Hero (título grande), uma breve descrição e o botão de toggle centralizado.
✅ Critérios de Entrega
- A troca de tema deve ser instantânea e sem recarregamento da página.
- As cores devem ser harmoniosas em ambos os temas.
- O código deve demonstrar o uso de
propsdentro dos template literals do Styled Components.
Desafio Extra
Tente usar o ThemeProvider do próprio Styled Components para gerenciar as cores de forma global!
Projeto 06 – Central de Atendimento ao Cliente 🎧
Neste projeto, você vai aplicar o react-hook-form para criar um sistema de tickets de suporte profissional e validado.
🎯 Objetivo
Gerenciar formulários complexos, tratar erros de validação em tempo real e garantir que apenas dados válidos sejam enviados para o "servidor".
🛠️ Requisitos
- Uso de react-hook-form.
- Validação de formato de e-mail (Regex).
- Mensagens de erro personalizadas e visuais (estilizadas em vermelho).
- Estado de "Enviando..." após o clique no botão.
📝 Passo a Passo
1. Instalação
No terminal:
2. Estrutura do Formulário
Crie um componente FormSuporte com os campos:
- Nome Completo (Obrigatório, min 3 letras).
- E-mail de Contato (Obrigatório, formato válido).
- Assunto (Select: Técnico, Financeiro, Outros).
- Mensagem (Textarea, obrigatório, min 20 caracteres).
3. Tratamento de Erros
Mostre as mensagens de erro logo abaixo de cada campo assim que o foco sair dele ou ao clicar em enviar.
4. Simulação de Envio
Na função onSubmit, use um setTimeout de 2 segundos para simular uma resposta de rede antes de exibir a mensagem final de "Ticket aberto com sucesso!".
✅ Critérios de Entrega
- O botão de enviar deve estar desabilitado ou dar feedback visual se houver erros.
- O objeto de dados final deve ser exibido no console no formato JSON correto.
- O código deve utilizar o spread operator
{...register("campo")}corretamente.
Dica Pro
Use a biblioteca react-toastify para mostrar as mensagens de sucesso de forma elegante no canto da tela!
Projeto 07 – Minha Primeira Rede Social (Navegação) 📱
Neste projeto, você vai construir a estrutura de navegação de uma rede social simplificada, lidando com perfis dinâmicos e rotas protegidas por lógica.
🎯 Objetivo
Dominar a estruturação de rotas complexas, parâmetros de URL e navegação programática.
🛠️ Requisitos
- Uso de BrowserRouter, Routes e Route.
- Criação de uma rota dinâmica para o perfil do usuário (
/perfil/:username). - Uso de Link e useNavigate.
📝 Passo a Passo
1. Estrutura de Páginas
Crie os componentes/páginas:
- Feed: Onde aparecem as postagens (Home).
- Explorar: Uma lista de usuários sugeridos.
- Perfil: Mostra o nome do usuário vindo da URL.
2. Menu de Navegação
Crie um componente SideBar que fique visível em todas as rotas e contenha links para Feed e Explorar.
3. Rota Dinâmica
Configure a rota do Perfil. Dentro do componente Perfil, use o useParams para mostrar na tela: "Você está visualizando o perfil de: [username]".
4. Navegação Programática
Na página de Explorar, adicione um botão "Logoff". Ao clicar, o sistema deve usar o useNavigate para mandar o usuário para uma página de Login (que você também deve criar).
✅ Critérios de Entrega
- Ao navegar entre Feed e Explorar, o componente Sidebar não deve sumir da tela.
- Ao acessar
/perfil/ricardo, a tela deve mostrar "ricardo". - Ao acessar uma URL inexistente, a página de erro 404 deve ser exibida.
Dica de UI
Use o NavLink para que o ícone ou texto do menu mude de cor quando o usuário estiver naquela aba específica!
Projeto 08 – Dashboard de Criptomoedas 📉
Neste projeto, você vai construir um painel financeiro que consome dados reais do mercado de moedas digitais.
🎯 Objetivo
Dominar o Axios, instâncias de API, tratamento de erros e renderização condicional de dados externos.
🛠️ Requisitos
- Uso de Axios para as requisições.
- Criação de uma instância centralizada de API (
api.js). - Uso de Async/Await.
- Tratamento de estados de Erro e Loading.
📝 Passo a Passo
1. Escolha da API
Utilize a API pública da CoinGecko:
https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=10&page=1
2. Service API
Crie a pasta src/services e o arquivo api.js configurando a URL base da CoinGecko.
3. Componente Lista
No componente principal:
- Dispare a busca no useEffect.
- Mapeie o array de moedas para exibir: Nome, Logotipo, Preço Atual e Variação nas últimas 24h.
4. Refinamento de UX
- Crie um botão "Atualizar Dados" que chama a função de busca novamente.
- Estilize a tabela ou os cards para que fiquem com aspecto profissional (use Tailwind ou Styled Components).
✅ Critérios de Entrega
- A aplicação deve mostrar dados reais de pelo menos 10 criptomoedas.
- Se o usuário estiver sem internet, uma mensagem clara de erro capturada pelo
catchdeve aparecer. - O código deve estar organizado seguindo o padrão de Services.
Bônus
Adicione um input de busca para filtrar a lista localmente por nome da moeda!
Projeto 09 – Sistema de Preferências do Usuário (Multilíngue) 🌍
Neste projeto, você vai construir um sistema onde o usuário pode escolher o idioma e o tema do site, e essas escolhas serão refletidas em toda a aplicação instantaneamente.
🎯 Objetivo
Implementar a Context API para gerenciar configurações globais, entender o papel do Provider e criar uma aplicação multi-componente sincronizada.
🛠️ Requisitos
- Criação de um
SettingsContext. - Gerenciamento global de Idioma (PT/EN) e Tema (Light/Dark).
- Uso de pelo menos 3 componentes consumidores em níveis diferentes de hierarquia.
📝 Passo a Passo
1. Criando o Contexto
Crie o arquivo src/contexts/SettingsContext.jsx. O estado inicial deve ter:
- linguagem: 'pt'
- tema: 'light'
2. O Power Provider
Envolva sua aplicação no App.jsx com o SettingsProvider. Certifique-se de passar tanto os valores quanto as funções de alteração (ex: setLinguagem).
3. Componentes Consumidores
- Header: Mostra o título no idioma selecionado.
- Conteúdo: Um texto longo que também traduz entre PT e EN.
- Footer: Contém os botões (Selects ou Toggles) para mudar as configurações globais.
4. Dicionário de Tradução
Crie um objeto simples para as traduções:
const frases = {
pt: { saudacao: 'Olá', subtitulo: 'Bem-vindo ao sistema' },
en: { saudacao: 'Hello', subtitulo: 'Welcome to the system' }
}
✅ Critérios de Entrega
- Ao mudar o idioma no Footer, o texto do Header deve mudar instantaneamente.
- A escolha do tema deve afetar as cores de fundo de toda a página.
- Não deve haver "Prop Drilling" (passagem manual de props entre os componentes intermediários).
Dica: localStorage
Como desafio extra, tente salvar a escolha do usuário no localStorage do navegador para que, ao recarregar a página, as preferências sejam mantidas!
Projeto 10 – Analytics Dashboard Otimizado 📊
Neste projeto, você vai construir um painel de dados que lida com grandes volumes de informação simulada, aplicando hooks avançados para garantir 60 FPS (quadros por segundo).
🎯 Objetivo
Identificar gargalos de performance, aplicar useMemo e useCallback corretamente e gerenciar o DOM de forma imperativa com useRef.
🛠️ Requisitos
- Uso de useMemo para processamento de dados.
- Uso de useRef para focar elementos ou controlar bibliotecas externas (ex: Charts).
- Implementação de uma lista filtrável com mais de 100 itens.
📝 Passo a Passo
1. Mock de Dados
Crie uma função que gera 500 objetos de "Vendas" com: id, vendedor, valor e data.
2. Painel de Estatísticas
Crie 3 cards que mostram: Total de Vendas, Média de Valor e Maior Venda.
- Regra: Esses cálculos devem estar dentro de um useMemo que depende apenas da lista de vendas.
3. Filtro de Vendedores
Crie um input de busca por nome de vendedor. - A filtragem deve ser otimizada para não rodar se o usuário estiver apenas mudando o tema do site, por exemplo.
4. Foco Instantâneo
Ao clicar em um botão "Novo Filtro", o input de busca deve ser limpo e focado automaticamente através de uma ref.
✅ Critérios de Entrega
- O componente não deve "travar" ao digitar no campo de busca.
- Deve ser possível provar que as funções de cálculo não rodam fora de hora (via console.logs).
- O código deve estar limpo e bem documentado sobre o porquê de cada otimização.
Dica de Mestre
Use o Profiler do React DevTools para gravar uma interação e comprove que os componentes memorizados não estão renderizando sem necessidade!
Projeto 11 – Galeria de Mídia de Próxima Geração ⚡
O objetivo deste projeto é construir uma aplicação de mídia que carregue instantaneamente, mesmo com centenas de itens, utilizando todas as técnicas de performance aprendidas.
🎯 Objetivo
Reduzir o "Tamanho do Bundle", evitar re-renderizações desnecessárias e otimizar o carregamento de recursos externos.
🛠️ Requisitos
- Uso de React.lazy e Suspense para rotas.
- Uso de React.memo em componentes de card.
- Otimização de carregamento de imagens (Lazy Load nativo).
- Divisão de componentes em "pedaços" (Splitting).
📝 Passo a Passo
1. Roteamento Inteligente
Configure pelo menos 3 rotas (Home, Galeria, Sobre).
As rotas Galeria e Sobre devem ser carregadas via lazy.
2. Cards Memorizados
Crie um componente FotoCard. Ele deve ser envolvido em memo.
Passe um ID e uma URL de imagem. Adicione um contador no componente pai e prove que os cards não renderizam quando o contador muda.
3. Esqueleto de Carregamento (Skeleton)
Em vez de um texto "Carregando...", crie um componente de Skeleton (uma div cinza animada) para mostrar enquanto as fotos ou as páginas não carregam.
4. Análise de Build
Rode o comando npm run build e observe o terminal para ver o tamanho dos arquivos gerados antes e depois do lazy loading.
✅ Critérios de Entrega
- A aplicação deve pontuar alto no Lighthouse (aba Performance).
- Não deve haver "piscadas" bruscas de conteúdo ao trocar de página.
- O uso de memo e lazy deve ser justificado no código através de comentários.
Bônus
Use a biblioteca react-intersection-observer para criar uma animação de "surgimento" das imagens conforme entram na tela!
Projeto 12 – E-commerce Pro com Redux Toolkit 🛒
Neste projeto de nível profissional, você vai gerenciar todo o estado de um e-commerce (Carrinho, Autenticação e Favoritos) usando Redux.
🎯 Objetivo
Arquitetar uma store global escalável, lidar com múltiplas fatias de estado (slices) e garantir a sincronia entre diferentes partes da aplicação.
🛠️ Requisitos
- Uso de Redux Toolkit (@reduxjs/toolkit).
- Pelo menos 3 Slices:
cart,autheproducts. - Persistência básica ou feedback visual de mudanças globais.
📝 Passo a Passo
1. Configuração da Store
Crie o arquivo src/store/index.js e combine pelo menos os reducers de cart e auth.
2. O Carrinho de Compras
No cartSlice, crie as lógicas de:
- addItem: Adiciona item (se já houver, aumenta a quantidade).
- removeItem: Remove item completamente.
- clearCart: Limpa tudo.
3. Sistema de Login
No authSlice, gerencie se o usuário está logado.
- Regra: O botão "Adicionar ao Carrinho" na vitrine só deve funcionar se o usuário estiver logado no Redux.
4. Integração Visual
- Navbar: Mostra a quantidade total de itens no carrinho e o nome do usuário.
- Página de Carrinho: Lista os itens, mostra o valor total e permite alterar quantidades.
✅ Critérios de Entrega
- O estado deve ser consistente (ex: ao deletar um item no carrinho, o número na Navbar deve diminuir na mesma hora).
- Uso correto dos hooks
useSelectoreuseDispatch. - A Store deve estar bem organizada na pasta
store/do projeto.
Bônus: Redux Persist
Tente integrar a biblioteca redux-persist para que os itens do carrinho não sumam mesmo se o usuário der F5 na página!
Projeto 13 – Biblioteca de Componentes Testada 🧪
Neste projeto, você vai criar uma pequena biblioteca de componentes UI (Botão, Input, Modal) e garantir que todos funcionem perfeitamente através de testes automatizados.
🎯 Objetivo
Configurar o ambiente de testes do zero, escrever suítes de teste para diferentes cenários e garantir 100% de confiança nas interações críticas.
🛠️ Requisitos
- Uso de Vitest e React Testing Library.
- Implementação de testes para: Renderização, Props e Eventos de Clique.
- Uso de jest-dom para asserções amigáveis.
📝 Passo a Passo
1. Configuração do Vitest
Crie o arquivo vitest.config.js e configure o ambiente para jsdom.
2. Componente de Botão
Crie um componente MeuBotao que aceita as props children, onClick e disabled.
- Teste se ele renderiza o texto passado em children.
- Teste se a função onClick é disparada ao clicar.
- Teste se ele fica desabilitado quando a prop disabled for verdadeira.
3. Componente de Input de Busca
Crie um componente que tenha um input e um botão de limpar. - Teste se o valor do input muda ao digitar. - Teste se o campo fica vazio ao clicar no botão "Limpar".
4. Rodando os Testes
Use o comando npm test para visualizar o relatório de sucesso no terminal.
✅ Critérios de Entrega
- Todos os testes devem passar (ficar verdes).
- Os arquivos de teste devem ter a extensão
.test.jsxou.spec.jsx. - O código deve estar livre de "warnings" de act() (comum em testes assíncronos).
Bônus
Tente habilitar a visualização de Coverage (Cobertura) para ver quanto por cento do seu código está sendo testado!
Projeto 14 – Meu Diário na Nuvem ✍️☁️
Neste projeto, você vai construir uma aplicação de diário pessoal ou notas onde as informações são salvas com segurança no Firebase ou Supabase.
🎯 Objetivo
Dominar a integração de SDKs externos, gerenciar credenciais de ambiente e lidar com persistência de dados real.
🛠️ Requisitos
- Integração com Firebase Firestore ou Supabase.
- Uso de variáveis de ambiente (
.env). - Lógica de CRUD (Create, Read, Update, Delete).
📝 Passo a Passo
1. Ambiente Virtual
Crie o arquivo .env na raiz do seu projeto Vite e adicione suas chaves:
VITE_FIREBASE_KEY=sua_chave_aqui
2. Configuração do SDK
Crie o arquivo src/services/firebase.js (ou supabase.js) e inicialize o serviço exportando o objeto de conexão com o banco.
3. Criando Notas
Crie um formulário com título e conteúdo da nota. Ao clicar em "Salvar", envie para a coleção notas no banco de dados.
4. Gestão de Notas
- Liste todas as notas salvas.
- Adicione um botão de "Lixeira" em cada nota para deletá-la do banco de dados global.
✅ Critérios de Entrega
- As notas devem persistir (ficar salvas) mesmo se você fechar o navegador e abrir de novo.
- Não deve haver chaves expostas no código principal (usar as variáveis de ambiente).
- A interface deve mostrar um feedback visual de "Salvando..." durante a operação.
Bônus
Adicione Autenticação! Permita que o usuário faça login com o Google para ver apenas as notas que ELE criou!
Projeto 15 – Portfolio Profissional no Ar 🚀🌐
Neste projeto, você vai consolidar sua identidade como desenvolvedor, criando um portfólio pessoal e fazendo o deploy oficial para o mundo todo ver.
🎯 Objetivo
Configurar SEO, transformar o site em PWA e dominar o fluxo de Continuous Integration/Continuous Deployment (CI/CD).
🛠️ Requisitos
- Uso de Meta Tags completas.
- Configuração de Vite PWA Plugin.
- Deploy realizado na Vercel ou Netlify.
📝 Passo a Passo
1. Polimento de Conteúdo
Crie uma página com: - Sua Bio. - Lista de tecnologias que domina. - Links para seus outros 14 projetos do curso (pode usar os links do GitHub).
2. Configuração PWA
Configure o plugin PWA para que seu portfólio possa ser instalado no celular: - Ícone 512x512. - Nome curto e cor de tema.
3. O Grande Deploy
Conecte seu GitHub à plataforma de deploy escolhida. - Configure as variáveis de ambiente (se houver, ex: chaves do Firebase). - Rode o primeiro deploy e verifique o link público.
4. Teste de Acessibilidade
Rode o Lighthouse e garanta que sua nota de SEO e Acessibilidade esteja acima de 90.
✅ Critérios de Entrega
- O site deve estar acessível por uma URL pública (ex:
meunome.vercel.app). - O compartilhamento do link no WhatsApp deve exibir título e imagem corretos.
- O site deve permitir ser "Adicionado à tela de início" em dispositivos Android/iOS.
Dica Final
Coloque o link do seu portfólio no seu perfil do LinkedIn! É o primeiro passo para conseguir sua primeira oportunidade no mundo dev!
Projeto 16 – O Grande Dashboard 🏆⚛️
Este é o seu trabalho de conclusão de curso! Você vai mostrar tudo o que aprendeu construindo uma aplicação robusta e pronta para o mercado.
🎯 Objetivo
Integrar Rotas, Estado Global (Redux/Context), Consumo de API real, Validação de Formulários e Otimizações de Performance em um único projeto profissional.
🛠️ Requisitos Obrigatórios
- SPA com React Router: Pelo menos 4 rotas protegidas.
- Redux Toolkit: Gestão centralizada de pelo menos uma fatia de estado (ex: Carrinho ou User).
- Axios/Fetch: Consumo de dados externos.
- React Hook Form: Formulário de entrada de dados com validações.
- Design Premium: Uso de Tailwind ou Styled Components com foco em UX.
- Deploy: Site online e funcional.
📝 Sugestões de Temas
- Dashboard de Cripto/Ações: Gráficos, histórico e favoritos.
- Plataforma de E-learning: Lista de aulas, progresso e perfil.
- Sistema de RH: Cadastro de funcionários, filtros e estatísticas.
- E-commerce de Eletrônicos: Filtros, carrinho, checkout e histórico.
🚀 Passo a Passo
1. Planejamento
Defina seu tema e as rotas. Configure o projeto com o plugin de PWA.
2. Infraestrutura
Configure o Redux e o Axios. Se for usar Firebase, configure a conexão.
3. UI/UX
Construa os componentes reutilizáveis primeiro (Botões, Inputs, Layout). Depois monte as páginas.
4. Testes e Otimização
Escreva 3 testes críticos. Rode o Lighthouse e otimize as imagens e o bundle (Lazy load).
✅ Critérios de Avaliação
- Funcionalidade: O app faz o que se propõe sem erros no console?
- Código: Está limpo, modular e bem organizado?
- Performance: A navegação é fluida e o site carrega rápido?
- Apresentação: Você consegue explicar as decisões técnicas que tomou?
Gran Finale
Este projeto é o seu cartão de visitas. Capriche nos detalhes, adicione animações (Framer Motion é uma dica!) e mostre que você é agora um Desenvolvedor React de verdade!
Quizzes
🧠 Quizzes de Fixação
Lista completa das 20 unidades de quizzes organizadas em 5 módulos didáticos.
-
Módulo 1: Fundamentos (01 a 04) ---
-
Módulo 2: Conceitos Essenciais (05 a 08) ---
-
Módulo 3: Aplicação Prática (09 a 12) ---
-
Módulo 4: Padrões e Ferramentas (13 a 16) ---
-
Módulo 5: Avançado e Capstone (17 a 20) ---
🧠 Quiz 01 – Introdução ao Frontend Moderno 🚀
- Qual é o conceito fundamental e objetivo principal de Introdução ao Frontend Moderno 🚀?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Introdução ao Frontend Moderno 🚀?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Introdução ao Frontend Moderno 🚀, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Introdução ao Frontend Moderno 🚀?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Introdução ao Frontend Moderno 🚀 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Introdução ao Frontend Moderno 🚀, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Introdução ao Frontend Moderno 🚀?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Introdução ao Frontend Moderno 🚀 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Introdução ao Frontend Moderno 🚀 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Introdução ao Frontend Moderno 🚀 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 02 – Fundamentos: JSX, Componentes e Props 🧱
- Qual é o conceito fundamental e objetivo principal de Fundamentos: JSX, Componentes e Props 🧱?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Fundamentos: JSX, Componentes e Props 🧱?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Fundamentos: JSX, Componentes e Props 🧱, Componentes e Props 🧱, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Fundamentos: JSX, Componentes e Props 🧱?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Fundamentos: JSX, Componentes e Props 🧱 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Fundamentos: JSX, Componentes e Props 🧱, Componentes e Props 🧱, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Fundamentos: JSX, Componentes e Props 🧱?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Fundamentos: JSX, Componentes e Props 🧱 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Fundamentos: JSX, Componentes e Props 🧱 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Fundamentos: JSX, Componentes e Props 🧱 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 03 – Hooks I: useState e Estado Local 🎣
- Qual é o conceito fundamental e objetivo principal de Hooks I: useState e Estado Local 🎣?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Hooks I: useState e Estado Local 🎣?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Hooks I: useState e Estado Local 🎣, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Hooks I: useState e Estado Local 🎣?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Hooks I: useState e Estado Local 🎣 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Hooks I: useState e Estado Local 🎣, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Hooks I: useState e Estado Local 🎣?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Hooks I: useState e Estado Local 🎣 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Hooks I: useState e Estado Local 🎣 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Hooks I: useState e Estado Local 🎣 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 04 – Hooks II: useEffect e Ciclo de Vida 🔄
- Qual é o conceito fundamental e objetivo principal de Hooks II: useEffect e Ciclo de Vida 🔄?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Hooks II: useEffect e Ciclo de Vida 🔄?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Hooks II: useEffect e Ciclo de Vida 🔄, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Hooks II: useEffect e Ciclo de Vida 🔄?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Hooks II: useEffect e Ciclo de Vida 🔄 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Hooks II: useEffect e Ciclo de Vida 🔄, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Hooks II: useEffect e Ciclo de Vida 🔄?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Hooks II: useEffect e Ciclo de Vida 🔄 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Hooks II: useEffect e Ciclo de Vida 🔄 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Hooks II: useEffect e Ciclo de Vida 🔄 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 05 – Estilização: CSS Modules e Styled Components 🎨
- Qual é o conceito fundamental e objetivo principal de Estilização: CSS Modules e Styled Components 🎨?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Estilização: CSS Modules e Styled Components 🎨?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Estilização: CSS Modules e Styled Components 🎨, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Estilização: CSS Modules e Styled Components 🎨?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Estilização: CSS Modules e Styled Components 🎨 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Estilização: CSS Modules e Styled Components 🎨, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Estilização: CSS Modules e Styled Components 🎨?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Estilização: CSS Modules e Styled Components 🎨 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Estilização: CSS Modules e Styled Components 🎨 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Estilização: CSS Modules e Styled Components 🎨 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 06 – Formulários e Validação (React Hook Form) 📝
- Qual é o conceito fundamental e objetivo principal de Formulários e Validação (React Hook Form) 📝?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Formulários e Validação (React Hook Form) 📝?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Formulários e Validação (React Hook Form) 📝, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Formulários e Validação (React Hook Form) 📝?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Formulários e Validação (React Hook Form) 📝 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Formulários e Validação (React Hook Form) 📝, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Formulários e Validação (React Hook Form) 📝?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Formulários e Validação (React Hook Form) 📝 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Formulários e Validação (React Hook Form) 📝 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Formulários e Validação (React Hook Form) 📝 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 07 – React Router: Navegação SPA 🗺️
- Qual é o conceito fundamental e objetivo principal de React Router: Navegação SPA 🗺️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de React Router: Navegação SPA 🗺️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em React Router: Navegação SPA 🗺️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em React Router: Navegação SPA 🗺️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de React Router: Navegação SPA 🗺️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em React Router: Navegação SPA 🗺️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em React Router: Navegação SPA 🗺️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a React Router: Navegação SPA 🗺️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar React Router: Navegação SPA 🗺️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a React Router: Navegação SPA 🗺️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 08 – Consumo de APIs: Fetch e Axios 📡
- Qual é o conceito fundamental e objetivo principal de Consumo de APIs: Fetch e Axios 📡?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Consumo de APIs: Fetch e Axios 📡?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Consumo de APIs: Fetch e Axios 📡, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Consumo de APIs: Fetch e Axios 📡?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Consumo de APIs: Fetch e Axios 📡 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Consumo de APIs: Fetch e Axios 📡, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Consumo de APIs: Fetch e Axios 📡?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Consumo de APIs: Fetch e Axios 📡 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Consumo de APIs: Fetch e Axios 📡 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Consumo de APIs: Fetch e Axios 📡 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 09 – Context API: Estado Global Simples 🌐
- Qual é o conceito fundamental e objetivo principal de Context API: Estado Global Simples 🌐?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Context API: Estado Global Simples 🌐?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Context API: Estado Global Simples 🌐, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Context API: Estado Global Simples 🌐?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Context API: Estado Global Simples 🌐 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Context API: Estado Global Simples 🌐, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Context API: Estado Global Simples 🌐?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Context API: Estado Global Simples 🌐 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Context API: Estado Global Simples 🌐 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Context API: Estado Global Simples 🌐 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 10 – Hooks Avançados: useMemo, useCallback e useRef 🏗️
- Qual é o conceito fundamental e objetivo principal de Hooks Avançados: useMemo, useCallback e useRef 🏗️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Hooks Avançados: useMemo, useCallback e useRef 🏗️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Hooks Avançados: useMemo, useCallback e useRef 🏗️, useCallback e useRef 🏗️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Hooks Avançados: useMemo, useCallback e useRef 🏗️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Hooks Avançados: useMemo, useCallback e useRef 🏗️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Hooks Avançados: useMemo, useCallback e useRef 🏗️, useCallback e useRef 🏗️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Hooks Avançados: useMemo, useCallback e useRef 🏗️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Hooks Avançados: useMemo, useCallback e useRef 🏗️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Hooks Avançados: useMemo, useCallback e useRef 🏗️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Hooks Avançados: useMemo, useCallback e useRef 🏗️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 11 – Performance: React.memo e Lazy Loading 🚀
- Qual é o conceito fundamental e objetivo principal de Performance: React.memo e Lazy Loading 🚀?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Performance: React.memo e Lazy Loading 🚀?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Performance: React.memo e Lazy Loading 🚀, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Performance: React.memo e Lazy Loading 🚀?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Performance: React.memo e Lazy Loading 🚀 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Performance: React.memo e Lazy Loading 🚀, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Performance: React.memo e Lazy Loading 🚀?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Performance: React.memo e Lazy Loading 🚀 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Performance: React.memo e Lazy Loading 🚀 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Performance: React.memo e Lazy Loading 🚀 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 12 – Estado Global Avançado: Redux Toolkit 🏪
- Qual é o conceito fundamental e objetivo principal de Estado Global Avançado: Redux Toolkit 🏪?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Estado Global Avançado: Redux Toolkit 🏪?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Estado Global Avançado: Redux Toolkit 🏪, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Estado Global Avançado: Redux Toolkit 🏪?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Estado Global Avançado: Redux Toolkit 🏪 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Estado Global Avançado: Redux Toolkit 🏪, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Estado Global Avançado: Redux Toolkit 🏪?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Estado Global Avançado: Redux Toolkit 🏪 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Estado Global Avançado: Redux Toolkit 🏪 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Estado Global Avançado: Redux Toolkit 🏪 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 13 – Testes Unitários: Vitest e React Testing Library 🧪
- Qual é o conceito fundamental e objetivo principal de Testes Unitários: Vitest e React Testing Library 🧪?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Testes Unitários: Vitest e React Testing Library 🧪?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Testes Unitários: Vitest e React Testing Library 🧪, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Testes Unitários: Vitest e React Testing Library 🧪?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Testes Unitários: Vitest e React Testing Library 🧪 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Testes Unitários: Vitest e React Testing Library 🧪, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Testes Unitários: Vitest e React Testing Library 🧪?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Testes Unitários: Vitest e React Testing Library 🧪 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Testes Unitários: Vitest e React Testing Library 🧪 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Testes Unitários: Vitest e React Testing Library 🧪 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 14 – Integração com Backend: Firebase e Supabase ☁️
- Qual é o conceito fundamental e objetivo principal de Integração com Backend: Firebase e Supabase ☁️?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Integração com Backend: Firebase e Supabase ☁️?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Integração com Backend: Firebase e Supabase ☁️, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Integração com Backend: Firebase e Supabase ☁️?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Integração com Backend: Firebase e Supabase ☁️ atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Integração com Backend: Firebase e Supabase ☁️, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Integração com Backend: Firebase e Supabase ☁️?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Integração com Backend: Firebase e Supabase ☁️ estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Integração com Backend: Firebase e Supabase ☁️ com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Integração com Backend: Firebase e Supabase ☁️ deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 15 – PWA e Deploy: Colocando no Ar! 🚀
- Qual é o conceito fundamental e objetivo principal de PWA e Deploy: Colocando no Ar! 🚀?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de PWA e Deploy: Colocando no Ar! 🚀?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em PWA e Deploy: Colocando no Ar! 🚀, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em PWA e Deploy: Colocando no Ar! 🚀?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de PWA e Deploy: Colocando no Ar! 🚀 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em PWA e Deploy: Colocando no Ar! 🚀, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em PWA e Deploy: Colocando no Ar! 🚀?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a PWA e Deploy: Colocando no Ar! 🚀 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar PWA e Deploy: Colocando no Ar! 🚀 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a PWA e Deploy: Colocando no Ar! 🚀 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 16 – Projeto Final: Dashboard Completo 🏆
- Qual é o conceito fundamental e objetivo principal de Projeto Final: Dashboard Completo 🏆?
- ( ) Reduzir a segurança do sistema sem análise prévia.
- (x) Garantir estruturação, eficiência e qualidade no desenvolvimento de software.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Bloquear a execução de rotinas assíncronas.
-
Qual benefício direto é obtido ao aplicar as melhores práticas de Projeto Final: Dashboard Completo 🏆?
- (x) Maior manutenibilidade, legibilidade, desacoplamento e desempenho.
- ( ) Aumento indeterminado no tempo de latência das chamadas à API.
- ( ) Incompatibilidade com os compiladores e interpretadores modernos.
-
( ) Impedir a criação de testes automatizados.
-
Em relação ao fluxo de execução e arquitetura em Projeto Final: Dashboard Completo 🏆, assinale a alternativa correta:
- ( ) A lógica opera sem validação de entradas ou saídas.
- (x) O fluxo de dados segue validação rigorosa de entrada, processamento coeso e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de visualização.
-
( ) É proibido desacoplar dependências entre módulos.
-
Qual é a conduta recomendada para manter a legibilidade do código em Projeto Final: Dashboard Completo 🏆?
- (x) Seguir convenções de nomenclatura limpa, modularização e documentação clara.
- ( ) Utilizar variáveis globais sem restrição de acesso.
- ( ) Substituir nomes descritivos por identificadores de um único caractere.
-
( ) Desabilitar a checagem de tipos e validação estática.
-
Como comprovar que a implementação de Projeto Final: Dashboard Completo 🏆 atingiu os critérios de aceitação?
- ( ) Avaliando visualmente a quantidade total de linhas de código.
- (x) Executando suítes de testes unitários e de integração automatizados com cobertura adequada.
- ( ) Verificando a paleta de cores do editor de texto.
-
( ) Omitindo os relatórios de execução de testes no CI/CD.
-
Ao tratar exceções e cenários de falha em Projeto Final: Dashboard Completo 🏆, o desenvolvedor deve:
- (x) Capturar erros específicos, registrar logs rastreáveis e fornecer mensagens claras.
- ( ) Silenciar todas as exceções com blocos vazios.
- ( ) Encerrar abruptamente o processo do servidor sem notificação.
-
( ) Modificar variáveis de ambiente do sistema operacional.
-
Qual o risco de ignorar as convenções e padrões recomendados em Projeto Final: Dashboard Completo 🏆?
- (x) Acúmulo de débito técnico, vulnerabilidades de segurança e degradação de desempenho.
- ( ) Formatação automática de arquivos na IDE.
- ( ) Aumento espontâneo da velocidade do barramento de memória.
-
( ) Exclusão de arquivos de configuração do projeto.
-
O princípio da responsabilidade única aplicado a Projeto Final: Dashboard Completo 🏆 estabelece que:
- (x) Cada componente ou módulo deve ter apenas uma única razão para mudar.
- ( ) Todas as funções do projeto devem residir no mesmo arquivo-fonte.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os testes automatizados devem ser deletados antes da compilação de produção.
-
Para integrar Projeto Final: Dashboard Completo 🏆 com outros serviços e módulos do ecossistema, deve-se:
- (x) Utilizar interfaces bem definidas, abstrações e contratos claros (APIs/DTOs).
- ( ) Acessar diretamente estruturas privadas internas de outros módulos.
- ( ) Trafegar dados confidenciais em texto puro sem criptografia.
-
( ) Desativar os protocolos de comunicação da rede.
-
A documentação técnica referente a Projeto Final: Dashboard Completo 🏆 deve conter obrigatoriamente:
- (x) Requisitos funcionais, arquitetura, exemplos práticos de uso e instruções de teste.
- ( ) Apenas a assinatura digital do autor.
- ( ) Uma lista aleatória de comandos de sistema operacional.
- ( ) Rascunhos não revisados de reuniões antigas.
🧠 Quiz 17 – Hooks Customizados Avançados e Contexto Isolado 🚀
- Qual o propósito principal de Hooks Customizados Avançados e Contexto Isolado 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Hooks Customizados Avançados e Contexto Isolado 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Hooks Customizados Avançados e Contexto Isolado 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Hooks Customizados Avançados e Contexto Isolado 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Hooks Customizados Avançados e Contexto Isolado 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Hooks Customizados Avançados e Contexto Isolado 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Hooks Customizados Avançados e Contexto Isolado 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Hooks Customizados Avançados e Contexto Isolado 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Hooks Customizados Avançados e Contexto Isolado 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Hooks Customizados Avançados e Contexto Isolado 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 18 – Otimização de Renderização com Memoização e Suspense 🚀
- Qual o propósito principal de Otimização de Renderização com Memoização e Suspense 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Otimização de Renderização com Memoização e Suspense 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Otimização de Renderização com Memoização e Suspense 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Otimização de Renderização com Memoização e Suspense 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Otimização de Renderização com Memoização e Suspense 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Otimização de Renderização com Memoização e Suspense 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Otimização de Renderização com Memoização e Suspense 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Otimização de Renderização com Memoização e Suspense 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Otimização de Renderização com Memoização e Suspense 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Otimização de Renderização com Memoização e Suspense 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 19 – Gerenciamento de Estado Global Desacoplado 🚀
- Qual o propósito principal de Gerenciamento de Estado Global Desacoplado 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Gerenciamento de Estado Global Desacoplado 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Gerenciamento de Estado Global Desacoplado 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Gerenciamento de Estado Global Desacoplado 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Gerenciamento de Estado Global Desacoplado 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Gerenciamento de Estado Global Desacoplado 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Gerenciamento de Estado Global Desacoplado 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Gerenciamento de Estado Global Desacoplado 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Gerenciamento de Estado Global Desacoplado 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Gerenciamento de Estado Global Desacoplado 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
🧠 Quiz 20 – Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀
- Qual o propósito principal de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀?
- ( ) Reduzir o espaço em disco sem validação.
- (x) Garantir estruturação, eficiência e robustez no processamento do sistema.
- ( ) Desativar os testes unitários automatizados.
-
( ) Substituir a documentação técnica por código legado.
-
Qual benefício direto é obtido ao aplicar os padrões de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀?
- (x) Maior manutenibilidade, legibilidade e desempenho.
- ( ) Aumento no tempo de resposta das chamadas à API.
- ( ) Incompatibilidade com compiladores modernos.
-
( ) Bloqueio da execução assíncrona.
-
Em relação à arquitetura de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀, assinale a alternativa correta:
- ( ) O módulo opera de forma totalmente isolada sem interface de dados.
- (x) O fluxo de dados segue validação de entrada, processamento e verificação de saída.
- ( ) As regras de negócio devem ser codificadas diretamente na camada de apresentação.
-
( ) Não há suporte para testes de integração.
-
Qual a melhor prática ao implementar Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀?
- (x) Manter o código coeso, desacoplado e devidamente documentado.
- ( ) Utilizar variáveis globais sem controle de acesso.
- ( ) Omitir o tratamento de erros em produção.
-
( ) Desabilitar a checagem de tipos estáticos.
-
Como verificar se a implementação de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀 atingiu os objetivos de qualidade?
- ( ) Observando o tamanho do arquivo fonte em bytes.
- (x) Executando testes automatizados de cobertura e benchmarks de desempenho.
- ( ) Verificando a cor do tema do editor de código.
-
( ) Aguardando reclamações dos usuários finais em produção.
-
Ao lidar com exceções em Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀, deve-se:
- (x) Capturar falhas específicas e fornecer mensagens informativas com rastreamento.
- ( ) Ignorar todos os erros com blocos vazios try-catch.
- ( ) Encerrar o sistema imediatamente sem log.
-
( ) Modificar o sistema operacional hospedeiro.
-
Qual o impacto do mau uso dos conceitos de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀?
- (x) Degradação de desempenho, vulnerabilidades de segurança e débito técnico.
- ( ) Redução automática no uso de memória RAM.
- ( ) Melhoria na taxa de transferência de dados da rede.
-
( ) Formatação automática de arquivos Markdown.
-
O princípio da responsabilidade única aplicado a Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀 determina que:
- (x) Cada classe ou função deve ter apenas uma razão para mudar.
- ( ) Todas as funções do sistema devem residir no mesmo arquivo.
- ( ) O banco de dados deve ser executado na mesma thread do frontend.
-
( ) Os comentários de código devem ser removidos antes da compilação.
-
Na integração de Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀 com outros componentes do ecossistema:
- (x) Deve-se utilizar interfaces bem definidas e contratos claros (APIs/DTOs).
- ( ) Deve-se utilizar acesso direto às estruturas privadas de outros módulos.
- ( ) É proibido transmitir dados pela rede.
-
( ) Todos os dados devem ser trafegados em formato de texto bruto desformatado.
-
A documentação técnica referente a Projeto Capstone: Aplicação React SPA Autônoma Completa 🚀 deve conter:
- (x) Requisitos, diagramas de fluxo, exemplos de uso e instruções de teste.
- ( ) Apenas o nome do autor do código.
- ( ) Lista de reprodução de músicas recomendadas.
- ( ) Histórico completo de conversas do suporte.
Slides
Configuração
Guia de Configuração do Ambiente 🛠️
Para desenvolver com React de forma profissional, precisamos preparar nosso "laboratório" com as ferramentas certas. Siga os guias abaixo na ordem recomendada.
📋 Roteiro de Instalação
1. Node.js e NPM
O motor que roda o JavaScript no seu computador e o gerenciador de pacotes para baixar as bibliotecas do React.
2. VS Code e Extensões
O editor de código preferido dos desenvolvedores React, turbinado com extensões para produtividade.
🚀 Próximos Passos
Após concluir as instalações, você estará pronto para criar seu primeiro projeto usando o Vite.
Suporte
Em caso de dúvidas durante a instalação, consulte a comunidade no Discord do curso ou abra uma Issue no repositório oficial.
Setup 01: Node.js e Gerenciadores de Pacote 🟢
O Node.js é indispensável para o desenvolvimento frontend moderno. Ele nos permite rodar ferramentas de construção, servidores locais e gerenciar milhões de bibliotecas.
📥 Download e Instalação
Windows e macOS
- Acesse o site oficial: nodejs.org.
- Escolha a versão LTS (Long Term Support). Ela é a mais estável e recomendada para produção.
- Siga o instalador "Next, Next, Finish".
Linux (Ubuntu/Debian)
$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt-get install -y nodejs
✅ Verificando a Instalação
Abra seu terminal (PowerShell, CMD ou Terminal do Linux/Mac) e digite:
Tudo pronto!
Se as versões aparecerem, o motor está ligado!
📦 NPM vs Yarn vs PNPM
Embora o NPM venha instalado com o Node, você ouvirá falar de outros gerenciadores: - NPM: O padrão da indústria. - Yarn: Criado pelo Facebook, focado em velocidade. - PNPM: Focado em economia de espaço em disco.
Neste curso, utilizaremos o NPM por ser o padrão nativo.
Setup 02: VS Code e Extensões React 💻
O Visual Studio Code é o melhor amigo do desenvolvedor React. Vamos configurá-lo para que ele ajude você a escrever código mais rápido e com menos erros.
🛠️ Extensões Recomendadas
Procure por estas extensões na loja do VS Code (Ctrl+Shift+X):
- ES7+ React/Redux/React-Native snippets: Atalhos poderosos (ex: digite
rfcepara criar um componente inteiro). - Prettier - Code formatter: Deixa seu código alinhado e bonito automaticamente ao salvar.
- Tailwind CSS IntelliSense: (Se for usar Tailwind) Ajuda com o autocompletar das classes.
- Auto Close Tag: Fecha as tags JSX automaticamente para você.
⚙️ Configurações Sugeridas (Settings)
Para o Prettier funcionar bem, adicione isso ao seu settings.json:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"javascript.suggest.autoImports": true
}
⌨️ Atalhos Essenciais
| Atalho | Ação |
|---|---|
Ctrl + ' |
Abre o terminal integrado |
Ctrl + P |
Busca rápida de arquivos |
Alt + Up/Down |
Move a linha de código |
Ctrl + / |
Comenta a linha selecionada |
Dica de Produtividade
Aprenda a usar o terminal integrado do VS Code para rodar os comandos npm run dev sem precisar sair do editor.
Setup 03: Ferramentas de Apoio 🛠️
Além da IDE, você precisará de ferramentas para gerenciar código e testar dados.
1. Git e GitHub
Essencial para versionamento. * Download: git-scm.com. * Configuração Inicial:
2. Postman ou Insomnia
Para testar as APIs REST antes de escrever código Kotlin/Swift. * Postman: postman.com. * Insomnia: insomnia.rest.
3. Vysor (Opcional)
Para espelhar a tela do seu celular real no computador (via cabo USB). * Acesso: vysor.io.
4. ADB (Android Debug Bridge)
Já vem com o Android Studio, mas é útil no PATH do sistema.
* Permite instalar APKs via terminal: adb install app.apk.
* Permite ver logs detalhados: adb logcat.
5. Flipper (Meta)
Uma ferramenta avançada para debugar bancos de dados SQLite e chamadas de rede direto na interface visual. * Acesso: fbflipper.com.
Sobre
Sobre o Curso
🎓 Desenvolvimento Frontend com React
Este curso foi projetado para transformar iniciantes em desenvolvedores frontend capazes de construir aplicações web profissionais, reativas e escaláveis utilizando a biblioteca mais popular do mercado.
🎯 Objetivos do Curso
-
Fundamentos Sólidos --- Compreender os princípios do React, como reconciliação, virtual DOM e o paradigma declarativo.
-
Domínio de Estados --- Gerenciar dados de forma eficiente, desde fluxos locais simples até arquiteturas de estado global complexas.
-
Interfaces Profissionais --- Criar designs modernos e responsivos utilizando CSS Modules, Styled Components e Tailwind CSS.
-
Conexão com Realidade --- Integrar aplicações frontend com backends reais, lidando com autenticação, segurança e performance.
📚 O Que Você Vai Aprender
Módulo 1 – Fundamentos e Essenciais
- Ecossistema JavaScript moderno
- Estrutura de projetos com Vite
- JSX e Componentização funcional
- Hooks essenciais (useState, useEffect)
Módulo 2 – Estilização e Componentização
- Bibliotecas de estilização modernas
- Composição e padrões de componentes
- Renderização de listas e formulários
- Organização e arquitetura de pastas
Módulo 3 – Navegação e Gerenciamento de Dados
- Roteamento dinâmico com React Router
- Integração com APIs via Axios
- Gerenciamento de estado global com Context API
- Validação robusta de formulários
Módulo 4 – Performance e Qualidade
- Otimização de renderização e memoização
- Testes unitários e de componentes
- Autenticação JWT e proteção de rotas
- Build e estratégias de Deploy
🛠️ Metodologia
Foco direto na prática através da Metodologia Baseada em Projetos (PBL). Você aprenderá cada conceito aplicando-o imediatamente em mini-desafios e no desenvolvimento incremental de uma aplicação completa.
Pronto para dominar o Frontend? Começar Agora
Roadmap do Projeto: Desenvolvimento Frontend com React 🚀
Este documento rastreia a evolução da refatoração do curso.
✅ Fase 1: Planejamento (Concluído)
- Reestruturação da ementa (16 Aulas de React)
- Definição da stack tecnológica (Vite, React Router, Tailwind)
- Configuração visual e de navegação no MkDocs Material
🏗️ Fase 2: Refatoração de Conteúdo (Em Andamento)
- [/] Atualização das 16 Aulas (Markdown)
- [/] Atualização dos 16 Quizzes (Interativos)
- [/] Atualização dos 16 Conjuntos de Exercícios
- [/] Atualização dos 16 Slides (RevealJS)
🚀 Fase 3: Validação e Qualidade (Pendente)
- Revisão ortográfica e técnica (100% PT-BR)
- Verificação de acessibilidade e design responsivo
- Testes de build estrito (
mkdocs build --strict)
🚢 Fase 4: Launch e Deploy
- Deploy automatizado no GitHub Pages
- Criação de guia de configuração de ambiente para o aluno
- Publicação do projeto final modelo
Status Atual: Em Refatoração Última Atualização: 21/02/2026
Materiais Complementares 📚
Bem-vindo à seção de materiais complementares do curso de Desenvolvimento Frontend com React. Aqui você encontra recursos adicionais para apoiar seus estudos e aprofundar seu conhecimento técnico.
-
- Acompanhe o conteúdo teórico com slides dinâmicos e modernos.
-
- Pratique a criação de componentes e gerenciamento de estados.
-
- Valide seu aprendizado com testes rápidos por aula.
-
- Construa aplicações reais do básico ao avançado para seu portfólio.
-
- Guias de instalação (Node.js, VS Code, extensões essenciais).
Exercícios de Fixação – Aula 05 🎨
Exercício 01: CSS Modules
Crie um componente Botao e um arquivo Botao.module.css. Aplique uma classe que mude a cor de fundo e o arredondamento das bordas. Verifique no navegador como o nome da classe foi alterado (inspecionar elemento).
Exercício 02: Styled Components Básico
Instale o styled-components e crie um componente chamado Titulo que seja um h1 com cor azul e fonte em itálico.
Exercício 03: Estilo Dinâmico (Props)
Crie um componente Box usando Styled Components que recebe uma prop bg. A cor de fundo da div deve ser o valor passado nessa prop.
Quiz – Aula 05 🧠
- Qual a principal vantagem do CSS Modules?
- Deixa o site mais rápido.
- Evita conflitos de nomes de classes entre componentes diferentes.
- Transforma o CSS em JavaScript automaticamente.
-
Não precisa de arquivos
.css. Explicação: CSS Modules gera escopos locais para as classes CSS. -
Como instalamos o Styled Components em um projeto?
-
npm install styled-components -
npm get styled - Já vem instalado no Windows.
- Copiando o arquivo .exe. Explicação: É uma biblioteca de terceiros baixada via NPM.
Projeto 05 – Landing Page Tematizável 🌈
Objetivo: Criar uma página com troca dinâmica de temas usando Styled Components.
- Use ThemeProvider ou apenas estilos dinâmicos baseados em props.
- Crie um botão que alterna entre tema "Verão" e tema "Inverno".
- Use Styled Components para todos os elementos principais.
Exercícios de Fixação – Aula 06 📝
Exercício 01: Setup do Form
Instale o react-hook-form e crie um formulário simples com um único campo "Nome". Ao submeter, exiba o nome em um alerta.
Exercício 02: Validação Required
Adicione uma regra de validação que impeça o envio do formulário se o campo "E-mail" estiver vazio. Exiba uma mensagem de erro em vermelho.
Exercício 03: Validação de Tamanho
Crie um campo "Senha". O formulário só deve ser válido se a senha tiver entre 8 e 20 caracteres.
Quiz – Aula 06 🧠
- O que o
registerfaz no React Hook Form? - Cria uma conta no site.
- Conecta um input ao gerenciamento da biblioteca.
- Salva os dados no banco.
-
Abre o terminal. Explicação: Register é a função que "registra" o input para que a lib possa observar suas mudanças.
-
Qual a principal diferença de performance do React Hook Form?
- Ele usa menos internet.
- Ele evita re-renderizações desnecessárias em cada tecla digitada (uncontrolled).
- Ele apaga o cache.
- Ele só funciona no Chrome. Explicação: Ao contrário do useState, ele não faz o componente renderizar em cada mudança de letra.
Projeto 06 – Formulário de Suporte ao Cliente 🎧
Objetivo: Criar um formulário completo com validações.
- Campos: Nome, E-mail, Assunto (Select) e Mensagem (Textarea).
- Use react-hook-form.
- Exiba mensagens de erro claras para cada campo inválido.
- Bloqueie o botão de envio enquanto o formulário for inválido.
🏷️ Índice de Tags Didáticas
Navegue pelas aulas, exercícios e projetos do curso organizados por temas, tecnologias e conceitos fundamentais:
tags.md:145-167/name
Versão para Impressão
Esta página foi gerada automaticamente para impressão.