🚀 Capítulo 07: useEffect - Sentindo a Força
🎯 Objetivo da Aula
Ao final desta aula, você entenderá o que são os Efeitos Colaterais no React e saberá como usar o Hook useEffect para executar código em momentos específicos (como quando a tela carrega ou quando um dado muda).
🏢 O Cenário Prático (Seu Desafio)
Os sensores da sua nave precisam detectar a presença de naves inimigas. Toda vez que você mudar a velocidade da nave, o sensor precisa recalcular a distância do inimigo. Seu desafio é usar o useEffect para “sentir” a mudança na velocidade e recalcular essa distância!
🧠 Fundamentos: A Teoria Traduzida
O useEffect serve para lidar com coisas que acontecem “fora” do fluxo normal do componente (Efeitos Colaterais). Exemplos: buscar dados de uma API, atualizar o título da aba, ou escutar eventos.
A estrutura dele tem duas partes:
- A Função: O código que você quer rodar.
- O Array de Dependências: Uma lista de variáveis que o React fica “vigiando”.
Os 3 Comportamentos do useEffect:
- Sem array de dependências: Roda a cada vez que a tela atualiza. (Raro usar).
- Array vazio
[]: Roda apenas uma vez, quando o componente aparece na tela pela primeira vez. (Ótimo para buscar dados de APIs). - Com variáveis no array
[velocidade]: Roda toda vez que a variávelvelocidademudar.
📖 Exemplo Guiado: Sensor de Proximidade
Vamos vigiar a velocidade da nave.
🛠️ Passo a Passo
Abra o arquivo src/App.jsx.
- Importe o
useEffectjunto com ouseState:
import { useState, useEffect } from 'react';
function App() {
const [velocidade, setVelocidade] = useState(0);
const [distanciaInimigo, setDistanciaInimigo] = useState(1000);
// useEffect vigiando a variável 'velocidade'
useEffect(() => {
console.log('A velocidade mudou! Recalculando distância...');
// Simulação de cálculo: quanto mais rápido, mais perto chegamos do inimigo
setDistanciaInimigo(1000 - (velocidade * 2));
}, [velocidade]); // <- Array de dependências
return (
<div>
<h1>📡 Sensores de Longo Alcance</h1>
<p>Velocidade: **{velocidade} km/h**</p>
<p>Distância do Inimigo: **{distanciaInimigo} km**</p>
<button onClick={() => setVelocidade(velocidade + 10)}>
Aumentar Velocidade
</button>
</div>
)
}
export default App;🕹️ Como Executar e Testar no VS Code
- Salve e abra o navegador e o Console (F12).
- Clique no botão. Você verá a distância diminuir e a mensagem aparecer no console a cada clique!
🛠️ Prática Obrigatória 1
Adicione um useEffect com o array de dependências vazio [] que mostre a mensagem “Sistemas Iniciados” no console apenas uma vez quando a tela carregar.
🛠️ Prática Obrigatória 2
Use o useEffect (vigiando a distância) para disparar um alert('🚨 CUIDADO: Inimigo muito próximo!') quando a distanciaInimigo for menor que 500.
🔑 Gabarito de Código/Fórmulas
Prática 1:
useEffect(() => {
console.log('Sistemas Iniciados');
}, []); // Vazio = roda só no carregamentoPrática 2:
useEffect(() => {
if (distanciaInimigo < 500) {
alert('🚨 CUIDADO: Inimigo muito próximo!');
}
}, [distanciaInimigo]);