1
resposta

Porque so funciona com Arrow Function

Boa tarde,

Porque esse trecho funciona assim:

removeLinhaTabela = index => {

console.log(index);

//const { lista } = this.state.lista;
const { lista_autores } = this.state;
console.log(lista_autores);


this.setState(
  {
    lista_autores: lista_autores.filter(function(autor, posAtual){
      console.log(autor, posAtual);
      return ;
    }),
  }
)

}

e não funciona assim:

removeLinhaTabela = function(index) {

console.log(index);

//const { lista } = this.state.lista;
const { lista_autores } = this.state;
console.log(lista_autores);


this.setState(
  {
    lista_autores: lista_autores.filter(function(autor, posAtual){
      console.log(autor, posAtual);
      return ;
    }),
  }
)

}

O erro é esse:

TypeError: Cannot destructure property 'lista_autores' of 'this.state' as it is undefined. App.removeLinhaTabela src/App.js:37 34 | console.log(index); 35 | 36 | //const { lista } = this.state.lista;

37 | const { lista_autores } = this.state; | ^ 38 | console.log(lista_autores); 39 | 40 |

1 resposta

Boa tarde, meu xará! Como vai?

Isso ocorre pois a função arrow tem um escopo diferente de uma função comum. Na função arrow o espoco da função é o mesmo de onde ela foi declarada. Então, se vc declara uma função arrow dentro de uma classe, dentro da função o this será o mesmo this utilizado dentro da classe. Justamente por isso, nesse seu exemplo, ao utilizar a função arrow tudo continua funcionando. Já ao utilizar uma função comum, o escopo passa a ser dinâmico e o this vai ter seu valor definido de acordo com quem chama a função. E desse modo o código deixa de funcionar, pois o this não tem mais o mesmo valor da classe.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!