Pular para conteúdo

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

  1. Crie um componente filho que recebe uma função via prop.
  2. Memoize o filho com React.memo.
  3. No pai, use o useCallback para passar a função para o filho.
  4. 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:**
// Solução de referência para: Crie um componente filho que recebe uma função via prop.
function solucaoExercicio() {
    console.log("Executando validação de: Hooks Avançados: useMemo, useCallback e useRef ️");
    return true;
}

solucaoExercicio();
- **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:**
// Solução de referência para: No pai, use o `useCallback` para passar a função para o filho.
function solucaoExercicio() {
    console.log("Executando validação de: Hooks Avançados: useMemo, useCallback e useRef ️");
    return true;
}

solucaoExercicio();
- **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.