Eu decidi ir a diante e fazer uma 'micro-melhoria' no código dos inputs para não repetir boa parte da estrutura do código em cada um dos componentes eu centralizei as ideias da aula em uma função apenas:
function handleChangeText(e, newState) {
let temporaryName = e.target.value
//validations without ifs, only by ternary operators:
try {
newState === setName
?
temporaryName = temporaryName.substr(0, 15)
:
newState === setNickname
?
temporaryName = temporaryName.substr(0, 40)
:
newState === setCpf
?
temporaryName = temporaryName.substr(0, 11) :
newState = undefined
} catch (err) {
throw new Error(`Todas as validações falharam, ${err}`)
}
newState(temporaryName)
}
#
e no componente ficou assim:
#
<TextField
value={name}
onChange={(e) => {
handleChangeText(e, setName)
}}
fullWidth
label="Nome"
name="name"
variant="outlined"
margin="normal"
/>
e para pegar o valor do formulário optei por treinar com a funcionalidade de FormData:
****
function handleFormDataGrip(e) {
e.preventDefault()
const formData = new FormData(e.target);
const name = formData.get('name')
const lastname = formData.get('lastname')
const cpf = formData.get('cpf')
const obj = {
nome: name,
lastname: lastname,
cpf: cpf
}
console.log(obj)
}
Mesmo sabendo que posso acessar ele direto do estado, assim eu consigo gerar um objeto JS a cada submit do botão, quem quiser fazer os testes ou postar suas dúvidas sobre o código! Estou aberto a sugestões :D