🚀 Capítulo 08: Custom Hooks - Sabedoria Jedi
🎯 Objetivo da Aula
Ao final desta aula, você saberá como criar os seus próprios Hooks personalizados (Custom Hooks) para isolar a lógica do seu componente e reaproveitá-la em qualquer lugar do seu projeto.
🏢 O Cenário Prático (Seu Desafio)
Várias telas da sua nave precisam de um cronômetro para contar o tempo de missão. Em vez de escrever o mesmo código de relógio em todas as telas, seu desafio é criar um Hook de Cronômetro e apenas chamá-lo onde precisar!
🧠 Fundamentos: A Teoria Traduzida
Até agora usamos os hooks que já vêm no React (useState, useEffect). Mas e se a gente pudesse criar o nosso próprio hook? Nós podemos!
O que é um Custom Hook?
É uma função JavaScript comum que:
- Começa com a palavra
use(ex:useCronometro,useFormulario). Isso avisa o React que é um hook. - Pode usar outros hooks dentro dele (como
useStateeuseEffect). - Retorna dados ou funções para o componente usar.
📖 Exemplo Guiado: Criando o Hook de Contador
Vamos criar um hook que gerencia a contagem de tempo.
🛠️ Passo a Passo (Criando o Hook)
- Crie um arquivo chamado
useContador.jsna pastasrc. - Adicione o código:
import { useState } from 'react';
// Nosso hook personalizado
export function useContador(valorInicial = 0) {
const [contador, setContador] = useState(valorInicial);
const incrementar = () => setContador(contador + 1);
const decrementar = () => setContador(contador - 1);
// Retornamos o valor e as funções para o componente usar
return { contador, incrementar, decrementar };
}🛠️ Passo a Passo (Usando no Componente)
Abra o App.jsx e use o seu novo hook:
import { useContador } from './useContador';
function App() {
// Chamamos o nosso hook como se fosse um hook do React!
const { contador, incrementar } = useContador(10); // Começa em 10
return (
<div>
<h1>⏱️ Tempo de Missão</h1>
<p>Segundos: **{contador}**</p>
<button onClick={incrementar}>Adicionar Segundo</button>
</div>
)
}
export default App;🕹️ Como Executar e Testar no VS Code
- Salve os arquivos e veja o navegador.
- O contador começará em 10 e o botão funcionará perfeitamente! A lógica está toda isolada no arquivo do hook.
🛠️ Prática Obrigatória 1
No arquivo useContador.js, adicione uma função chamada resetar que define o contador de volta para o valor inicial. Lembre-se de retornar essa função no final do arquivo.
🛠️ Prática Obrigatória 2
Use a função resetar no seu App.jsx criando um botão “Resetar Tempo”.
🔑 Gabarito de Código/Fórmulas
Prática 1:
No useContador.js:
const resetar = () => setContador(valorInicial);
return { contador, incrementar, decrementar, resetar };Prática 2:
No App.jsx:
const { contador, incrementar, resetar } = useContador(10);
// ...
<button onClick={resetar}>Resetar Tempo</button>