Nesta aula, vamos aprender a manipular múltiplos campos de formulário utilizando um único state em forma de objeto. Essa abordagem é ideal quando temos vários campos relacionados, como nome, cidade, e-mail, etc.
Vamos criar um formulário com dois campos de texto e capturar seus valores usando apenas um state:
// Importar useState
import { useState } from "react";
// Componente
function Formulario2(){
// State como objeto
const [formulario, setFormulario] = useState({
nome: "",
cidade: ""
});
// Função para capturar o valor dos inputs
const valorInput = (e) => {
const { name, value } = e.target;
setFormulario({...formulario, [name]: value});
}
// Retorno
return(
<form>
<h1>Nome: {formulario.nome}</h1>
<h1>Cidade: {formulario.cidade}</h1>
<input type="text" name="nome" placeholder="Digite seu nome" onChange={valorInput} />
<input type="text" name="cidade" placeholder="Digite sua cidade" onChange={valorInput} />
</form>
);
}
// Exportar
export default Formulario2;
Explicação:
formulario é um objeto que contém os campos nome e cidadeonChange de cada input chama a função valorInputvalorInput, usamos const {name, value} = e.target para extrair o nome do campo e seu valorsetFormulario atualiza o state usando o operador spread (...formulario) para manter os outros valores inalteradosSe você tiver mais campos, como e-mail ou telefone, basta adicioná-los ao objeto do state e dar o mesmo name correspondente no input:
const [formulario, setFormulario] = useState({
nome: "",
cidade: "",
email: "",
telefone: ""
});
E todos os inputs ainda podem compartilhar a mesma função valorInput sem precisar criar uma função separada para cada campo.
...formularioname do input deve corresponder exatamente ao nome da propriedade do objeto no stateAgora você já sabe como manipular múltiplos campos de formulário usando um único state no React!
Compartilho nossa aula no YouTube: