Módulo
4
PROJETO
Atividade 19: Múltiplos Estados e Formulários
Todo aplicativo contém uma tela de Cadastro ou Login. Aprenda a juntar várias peças num fluxo real.
🎯 Objetivos desta aula
-
✓
Usar múltiplos
useStatena mesma tela - ✓ Trancar Envios fazendo Validações Condicionais de "Campo Vazio"
- ✓ Dar o grande Alert() de Sucesso ao usuário com os dados coletados
📋 Empilhando Variáveis Comuns
A primeira vez que um aluno precisa fazer um form com Nome, Idade e Senha ele acha que precisa usar um super Objeto Master de State. Mas o ideal é simples: Crie quantos `useState` você precisar! Não há limites. Um form de 3 campos necessitará de 3 States limpinhos:
const [nome, setNome] = useState('');
const [idade, setIdade] = useState('');
const [senha, setSenha] = useState('');
// Cada <TextInput> casará suas props independentemente com cada um deles!
💻 Sistema de Cadastro Real
Estude o Fluxo de "Acatar Dados -> Pressionar Enviar -> Validar -> Concluir":
FormCadastro.js
import React, { useState } from 'react';
import { View, Text, TextInput, TouchableOpacity, Alert, StyleSheet } from 'react-native';
export default function Formulario() {
// 1. Estados Independentes
const [nome, setNome] = useState('');
const [idade, setIdade] = useState('');
// 2. A Função Ativada pelo Clique do Botão
function enviarCadastro() {
// VALIDAÇÃO: Bloquear os engraçadinhos que mandam form vazio
if (nome === '' || idade === '') {
Alert.alert('Erro Categórico ❌', 'Por favor, preencha NOME e IDADE para continuar!');
return; // RETURN VAZIO ENCERRA A FUNÇÃO AQUI MESMO!! IMPEDINDO O SUCESSO.
}
if(idade < 18) {
Alert.alert('Acesso Negado 👶', 'Somente Adultos acima de 18 anos são aceitos.');
return;
}
// Se chegou até aqui vivo, PASSOU POR TODAS AS VALIDAÇÕES com Sucesso!!
Alert.alert('Bem-Vindo Oficial! ✅', `Seu nome é ${nome} e você está com ${idade} anos na terra.`);
// LImpar tela depois do sucesso
setNome('');
setIdade('');
}
// 3. Render HTML
return (
<View style={styles.container}>
<Text style={styles.titulo}>Criar Conta Ninja</Text>
<View style={styles.caixaForm}>
<Text style={styles.label}>Nome Completo</Text>
<TextInput
style={styles.input} placeholder="Seu nome" placeholderTextColor="#64748b"
value={nome} onChangeText={setNome}
/>
<Text style={styles.label}>Idade</Text>
<TextInput
style={styles.input} placeholder="Ex: 30" placeholderTextColor="#64748b"
keyboardType="numeric" // TECLADO DE NUMEROS
value={idade} onChangeText={setIdade}
/>
<TouchableOpacity style={styles.btn} onPress={enviarCadastro}>
<Text style={styles.btnText}>Finalizar Cadastro</Text>
</TouchableOpacity>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: '#0f172a', padding: 20, justifyContent: 'center' },
titulo: { color: 'white', fontSize: 28, fontWeight: 'bold', textAlign: 'center', marginBottom: 30 },
caixaForm: { backgroundColor: '#1e293b', padding: 20, borderRadius: 20 },
label: { color: '#94a3b8', marginBottom: 5, marginLeft: 5 },
input: { height: 50, borderColor: '#334155', borderWidth: 1, borderRadius: 10, marginBottom: 20, paddingHorizontal: 15, color: 'white', backgroundColor: '#0f172a' },
btn: { backgroundColor: '#8b5cf6', height: 55, borderRadius: 10, alignItems: 'center', justifyContent: 'center', marginTop: 10 },
btnText: { color: 'white', fontWeight: 'bold', fontSize: 18 }
});
🎮 Desafios Práticos
DESAFIO
1
Adicionando uma Senha 🔒
- Copie o código inteiro de Formulario.js e cole no seu Snack vazio.
- Crie no JS um terceiro `useState` para Senha.
- Duplique um Bloco HTML de Input inteiro do Idade para virar o de Senha.
- Lembre-se de por a prop `secureTextEntry` (senha bolinha) no novo campo, e conectá-lo ao `onChangeText` do useState da sua Senha!
DESAFIO
2
Lógica de Rejeição de Senha Curta 🛡️
Aumentando nosso IF vigia do Formulário!
- Lá dentro da function `enviarCadastro`, onde fazemos os testes de falha, adicione um novo IF abaixo dos originais.
- A instrução mágica de tamanho de string que você precisa puxar é
if(senha.length < 5). Dê um Alert de "Sua senha precisa ter mais de 5 caracateres e dê seu belo `return;` pra impedir ele de avançar. Teste a falha simulada com senha de 3 letras!