Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

uso do this e do bind e do props

olá PessoAll, vou dizer o que entendi. props -> como em react tudo eh js a passagem de parametros eh feita via propriedade do html pra passar por valor para 'páginas/arquivos' diferentes this -> referencia ao objeto atual bind -> escuta o evento e vincula(liga) ele a uma funcao mais perto dele e pq precisa de colocar assim usando 2 vezes ele? {this.nomeFuncao(this)}

poderiam me explicar melhor esses conceitos principalmente o bind em questao tb se estah relacionado a sobrecarga e sobreescrita de metodos?

desde já agradeço!

1 resposta
solução!

Olá, Marco! Beleza?

Quando criamos uma função na estrutura normal function nomeDaFuncao() { ... } e ela é passada para outros componentes, o contexto de execução dela não será mais o componente o qual ela faz parte. Assim, perdendo-se o contexto, perde-se a noção do this.

O bind irá evitar isso pois carrega o this que foi passado na função quando ela for executada. Esse this é recebido por parâmetro do bind. O bind é um método que faz parte das funções por padrão, por isso para chamarmos ele, precisamos acessá-lo pela função. Esse é o motivo de precisarmos escrever this.nomeFuncao.bind(), e como dito, o bind() recebe como parâmetro o this que deve ser acoplado, ficando this.nomeFuncao.bind(this).

Enfim, essa é a ideia principal. Não é relacionado a sobrecarga e sobreescrita, é um comportamento do próprio JavaScript. Inclusive, outra forma de "resolver" esse problema é usar arrow functions, porque funções usam o contexto léxico, ou seja, o contexto delas é o contexto em que foram declaradas. Nesse caso, você precisa apenas declarar uma arrow function:

nomeFuncao = () => {
        console.log(this);
}

Outra forma é chamar o método da função em uma arrow function:

onClick={() => this.nomeFuncao()}

O problema desse caso é que cada renderização irá criar uma nova função (afeta a performance em casos extremos).

Resumidamente, o this é uma propriedade do JavaScript que possui um comportamento pouco previsível, dependendo de como a função é declarada ele se comporta de maneiras diferentes. O bind garante que quando o método for chamado fora da sua classe, em outro contexto, o this não mude ou se torne undefined. Arrow Functions também garantem isso, porque o this delas é sempre o mesmo (o objeto/classe em que foi declarada), mas como não é um método da classe, é recriada em memória sempre que uma atualização do componente ocorre.

Espero ter ajudado!