Atividade 17: O Contador Interativo
Todo Desenvolvedor React começa construindo um Contador. Vamos colocar o State num nível numérico!
🎯 Objetivos desta aula
- ✓ Manipular Estados contendo Números Inteiros
- ✓ Fazer Cálculos matemáticos Dinâmicos: Valor Atual + 1
- ✓ Trabalhar layout de múltiplos botões em linha
🔢 Matemática e Estados
A beleza de criar uma variável mágica chamando useState(0) é que passamos um zero (sem
aspas!) para dizer que o valor será puramente Numérico.
Isso abre as portas para cálculos de adição, subtração e multiplicação através do click do usuário.
Qual a Cobaia Genética do Teste?
Se nossa var for const [numero, setNumero] = useState(0), ao chamarmos o botão de
SOMAR o que devemos pedir para ele executar?
- ✖ setNumero( 1 ): Errado! Pois se apertarmos o botão de novo... vai ser cravado em '1' de novo e nunca saírá do 1.
- ✖ setNumero( numero++ ): Errado! É proíbido tentar autointar (++) a variável de Estado em React! Quebra proteção de leitura!
- ✅ setNumero( numero + 1 ): Perfeito! Lemos a variável velha, somamos um Math, e empurramos o RESULTADO disso fresco como valor inteiro novo para ela usar nas próximas vidas dela.
💻 Construindo o Contador
Abra o seu Snack/AppJS e analise a estrutura do aplicativo perfeito de Contador:
import React, { useState } from 'react';
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
export default function Contador() {
// Estado inicializado como 0 (Zero numérico)
const [contador, setContador] = useState(0);
// Criamos as funções de inteligência fora do HTML Base!
function aumentar() {
setContador(contador + 1);
}
function diminuir() {
setContador(contador - 1);
}
function zerar() {
setContador(0); // Apenas sobrepõe com 0 fixamente
}
return (
<View style={styles.container}>
<Text style={styles.titulo}>Meu Contador</Text>
{/* Aqui enfiamos O VALOR BIGODES na Tela */}
<Text style={styles.numeroDisplay}> {contador} </Text>
{/* Caixa para segurar e alinhar os Botões lado a lado */}
<View style={styles.linhaDeBotoes}>
<TouchableOpacity style={styles.botaoAumentar} onPress={aumentar}>
<Text style={styles.textoBotao}>+1</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.botaoDiminuir} onPress={diminuir}>
<Text style={styles.textoBotao}>-1</Text>
</TouchableOpacity>
</View>
{/* Botão Reset isolado embaixo */}
<TouchableOpacity style={styles.botaoReset} onPress={zerar}>
<Text style={styles.textoBotao}>Zerar Sistema</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: '#1e293b', alignItems: 'center', justifyContent: 'center' },
titulo: { color: 'white', fontSize: 24, fontWeight: 'bold' },
numeroDisplay: { fontSize: 80, fontWeight: '900', color: '#38bdf8', marginVertical: 40 },
linhaDeBotoes: { flexDirection: 'row', gap: 20, marginBottom: 40 }, // ROW para alinhá-los lado o Lado
botaoAumentar: { backgroundColor: '#10b981', padding: 20, borderRadius: 10, minWidth: 80, alignItems: 'center' },
botaoDiminuir: { backgroundColor: '#ef4444', padding: 20, borderRadius: 10, minWidth: 80, alignItems: 'center' },
botaoReset: { backgroundColor: '#64748b', padding: 15, borderRadius: 10, paddingHorizontal: 40 },
textoBotao: { color: 'white', fontWeight: 'bold', fontSize: 24 }
});
🎮 Desafios Práticos
Mão na massa!
Modificar Pulos 🛠️
- O botão "Aumentar" hoje pula de 1 em 1. Altere a função aumentar para que ele some `+10` toda vez que você o clicar.
- Teste e veja a magia da matematica instantânea ocorrendo na tela!
Trava de Valores 🚀
Adicionando lógica IFs dentro do Controle React.
- Um contador não deveria ter números negativos de estoque.
- Vá na função `diminuir()`. Adicione um `if(contador > 0) { ... set ... }`.
- Tente clicar no -1 no celular. Ao chegar em 0 ele não vai deixar diminuir mais! Muito bem, criamos um guarda!