🧩 Exercícios: Memoização e Otimização com useMemo e useCallback
Spec Frontend Com React • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 05.1 — Memoização de Cálculos Pesados com useMemo
Contexto: Memoização de Cálculos Pesados com useMemo no contexto de Memoização e Otimização com useMemo e useCallback.
Requisitos de Execução:
- Filtrar lista de 10.000 itens com
useMemorecalculando apenas quando o termo de busca for alterado.
Resultado Esperado
Cálculo caro executado apenas quando a dependência `termo` mudar.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_1_SeuNome - Envie na tarefa:
Atividade Cap 05 - Memoização e Otimização com useMemo e useCallback
🔑 Gabarito de Código & Solução Comentada
// FilterListMemo.tsx
import React, { useState, useMemo } from 'react';
export const FilterListMemo: React.FC<{ items: string[] }> = ({ items }) => {
const [termo, setTermo] = useState('');
const itensFiltrados = useMemo(() => {
console.log('Executando filtro pesado...');
return items.filter(i => i.toLowerCase().includes(termo.toLowerCase()));
}, [items, termo]);
return <div>{itensFiltrados.length} itens encontrados</div>;
};
🔍 Nível 2: Prática
Problema 05.2 — Estabilização de Referências de Funções com useCallback
Contexto: Estabilização de Referências de Funções com useCallback no contexto de Memoização e Otimização com useMemo e useCallback.
Requisitos de Execução:
- Envolver handler de exclusão com
useCallbackpara evitar re-renderizações desnecessárias de componentes filhos memoizados.
Resultado Esperado
Referência estável da função preservada entre re-renders do componente pai.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_2_SeuNome - Envie na tarefa:
Atividade Cap 05 - Memoização e Otimização com useMemo e useCallback
🔑 Gabarito de Código & Solução Comentada
// ParentChildCallback.tsx
import React, { useState, useCallback } from 'react';
export const ParentComponent = () => {
const [count, setCount] = useState(0);
const handleDelete = useCallback((id: number) => {
console.log('Deletando item:', id);
}, []);
return <button onClick={() => setCount(c => c + 1)}>Re-render ({count})</button>;
};
⚡ Nível 3: Integração
Problema 05.3 — Prevenção de Re-render com React.memo e Comparadores Customizados
Contexto: Prevenção de Re-render com React.memo e Comparadores Customizados no contexto de Memoização e Otimização com useMemo e useCallback.
Requisitos de Execução:
- Envolver componente de linha de tabela em
React.memocom função de comparaçãoareEqual(prev, next).
Resultado Esperado
Componente filho re-renderizado apenas se o status do item for modificado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_3_SeuNome - Envie na tarefa:
Atividade Cap 05 - Memoização e Otimização com useMemo e useCallback
🔑 Gabarito de Código & Solução Comentada
// MemoizedRow.tsx
import React, { memo } from 'react';
interface RowProps { id: number; title: string; done: boolean; }
export const TableRow = memo<RowProps>(({ id, title, done }) => {
console.log('Renderizando linha:', id);
return <tr><td>{title}</td><td>{done ? 'SIM' : 'NÃO'}</td></tr>;
}, (prev, next) => prev.done === next.done && prev.title === next.title);
🏆 Nível 4: Desafio Corporativo
Problema 05.4 — Diagnóstico de Performance com React Profiler e Por que Não Memoizar Tudo
Contexto: Diagnóstico de Performance com React Profiler e Por que Não Memoizar Tudo no contexto de Memoização e Otimização com useMemo e useCallback.
Requisitos de Execução:
- Medir métricas de renderização (
actualDuration,baseDuration) usando<Profiler>.
Resultado Esperado
Métricas de renderização auditadas sem overhead de memoizações desnecessárias.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_05_4_SeuNome - Envie na tarefa:
Atividade Cap 05 - Memoização e Otimização com useMemo e useCallback
🔑 Gabarito de Código & Solução Comentada
// ProfilerDemo.tsx
import React, { Profiler } from 'react';
export const ProfiledSection = () => {
const onRender = (id: string, phase: string, actualDuration: number) => {
console.log(`[Profiler] ${id} (${phase}): ${actualDuration.toFixed(2)}ms`);
};
return (
<Profiler id="SecaoCritica" onRender={onRender}>
<div>Conteúdo Corporativo</div>
</Profiler>
);
};
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |