Olhando os feedbacks até aqui, não é segredo pra ninguém, como este curso é especial... Para ajudar a compreender melhor a lógica da validação, segue os pontos importantes:
1) Quando a view é carregada, tenha em mente que as validações já estão definidas na instancia do FormValidator.js
class FormValidator {
constructor(validacoes){//elas chegam pelo construtor
this.validacoes = validacoes;
console.log(this.validacoes);//p/ constatação do q se fala
}
2) Se vc não lembra quais são, observe q elas são definidas em Formulario.js
this.validador = new FormValidator([
{
campo:'nome',
metodo:'isEmpty',
validoQuando: false,
mensagem: 'Preencha o campo Nome'
},
{
campo:'livro',
metodo:'isEmpty',
validoQuando: false,
mensagem: 'Preencha o campo Livro'
},
{
campo:'preco',
metodo:'isInt',
args: [{min:0, max:99999}],
validoQuando: true,
mensagem: 'Preencha o campo Preço com valor numérico'
}
]);
3) Blz. Compreenda que nos nossos campos do formulário, há o evento onChange() associado. Ou seja, a cada dado informado nos campos, um metodo é chamado
//classe Formulario.js . Olhe dentro do metodo render()!
<input
className="validate"
id="nome"
type="text"
name="nome"
value={nome}
onChange={this.escutadorDeInput}
/>
4) Este metodo chama-se 'escutadorDeInput' e ele recebe um evento. Por meio do event.target, descobrimos qual elemento do DOM o disparou. Ex: Eu posso está preenchendo Nome e o event.target está retornando por debaixo dos panos:
<input id="nome" type="text" name="nome" value="Josh">
5) do event.target, o que me interessa somente é as propriedades name e value.(name = nome do elementoHTML / value = valor digitado pelo usuario.) Eu passo tais infos p/ uma constante:
const { name, value } = event.target;
6) Finalizando o entendimento do metodo 'escutadorDeInput', ainda temos a seguinte instrução:
this.setState({
[name]: value
});
6.1) Lembra que temos o state associado ao formulario? Pois então, recorde tbm que a unica forma de atualizar os dados contidos dentro de um state é via .setState({informando o atributo : "valor a ser alterado"}). 6.2) [name] sempre equivale a um campo de nosso state. Ex: [name] : value é o mesmo que dizer atributo : "valor". Para ilustração, seria:
this.setState({
[nome]: "Josh"//altere o valor do atributo nome contido no state!
});
6.3) Se vc não lembra em que momento o state foi definido, observe seu arquivo Formulario.js, na parte do constructor!
this.stateInicial = {
nome: '',
livro: '',
preco: '',
validacao: this.validador.valido()
}
this.state = this.stateInicial;
Continua no próximo post...