Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Sobre métodos de classes

Então, tenho esse método :

removeAuthor(index){
    const {autores} = this.state

    this.setState(
      {
        autores: autores.filter((autor, posAtual) =>{
          return index !== posAtual
        })
      }
    )
  }

Porém, por algum motivo, ele me dá um erro no state, só que o mesmo não acontece se eu simplesmente uso a sintaxe de uma arrow function. Existe algum motivo pra isso? Estou me esquecendo de algum conceito básico de js?

1 resposta
solução

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.