Formularios com useState
Você ja fez isso aqui para lidar com estados de um formulario né?
const [firstName, setFirstName] = useState("");
const [lastName, setLastName] = useState("");
const [age, setAge] = useState("");
const [telephone, setTelephone] = useState("");
const [zipcode, setZipCoode] = useState("");
esta errado?
- não!
funciona?
- sim!
Então por que esse chato esta postando isto?
Então galera, tem uma maneira bem mais facil de lidar, você pode criar um estado contendo um objeto que vai lidar com todo o formulario, dessa forma você consegue praticidade e fica muito mais facil de dar manutenção!!!
const [form, setForm] = useState({
firstName: "",
lastName: "",
age: "",
telephone: "",
zipcode: ""
});
e pra setar o valor de cada propiedade dentro do nosso objeto é bem simples!!! a gente cria uma função que vai passar o objeto antigo, pegar o input pelo nome e atribuir o valor do input, dessa forma:
const handleChange = (e) => {
setForm({
...form,
[e.target.name]: e.target.value
});
};
SEGUE O LINK DO CODIGO PRA MELHOR ENTENDIMENTO - CLIQUE AQUI
Ficou alguma duvida? tem alguma sugestão? deixa o comentario!!! tmj galera!
Formulários simples eu costumo lidar apenas com uma referência, por exemplo:
const valueRef = useRef('');
function handleChange(e) {
valueRef.current = e.target.value;
}
function handleSubmit() {
callApi({ value: valueRef.current });
}
Isso evita rerenderizações desnecessárias causadas pelo useState
.
Para formulários maiores eu gosto de usar o useForm
do react-hook-form. Um exemplo da documentação deles:
import { useForm } from 'react-hook-form';
function App() {
const {
register,
handleSubmit,
formState: { errors },
} = useForm();
return (
<form onSubmit={handleSubmit((data) => console.log(data))}>
<input {...register('firstName')} />
<input {...register('lastName', { required: true })} />
{errors.lastName && <p>Last name is required.</p>}
<input {...register('age', { pattern: /\d+/ })} />
{errors.age && <p>Please enter number for age.</p>}
<input type="submit" />
</form>
);
}
Funciona bem. Com TypeScript você pode acabar sofrendo um pouco ao usar um componente controlado, mas eu acho que faz parte da complexidade, e não me arrependo de usar essa biblioteca. Conheci ela em 2020 ou 2021, antes usava o formik.