Fala ai Lucas, tudo bem? Esse é um velho problema de trabalhar com classes no React, quando você faz algo assim:
class AlgumComponente extends Component {
constructor(props) {
super(props)
this.state = {
nome: '',
}
}
alterarNome(event) {
this.setState({
nome: event.target.value,
})
}
}
O problema nesse caso é o contexto de execução da função, o this
não será a classe AlgumComponente
, então, para resolver o problema do contexto e garantir que o mesmo vai ser a classe AlgumComponente
a gente tem dois caminhos:
Fazer o bind
da função com a classe no construtor:
class AlgumComponente extends Component {
constructor(props) {
super(props)
this.state = {
nome: '',
}
this.alterarNome = this.alterarNome.bind(this)
}
alterarNome(event) {
this.setState({
nome: event.target.value,
})
}
}
Ou mudar a função de declaração para arrow:
class AlgumComponente extends Component {
constructor(props) {
super(props)
this.state = {
nome: '',
}
}
alterarNome = (event) => {
this.setState({
nome: event.target.value,
})
}
}
Para mais informações sobre o contexto de execução de cada função dá uma olhada nesse artigo: https://imasters.com.br/javascript/javascript-entendendo-o-de-uma-vez-por-todas
Espero ter ajudado.