1
resposta

Notificar(), inscrever(), novasCategorias() e componentDidMount() - Confusão com as propriedades

Bom dia pessoal. Fiquei extremamente confuso com a organização deste código.

Não estou entendendo de onde vem as propriedades (categorias) da função novasCategorias(categorias) e muito menos o percurso de func, não compreendi a propagação das informações dentro de todos estes elementos.

Por que existe um func => func(this.categorias) dentro de um forEach?

Ficou bem confuso toda essa parte, o professor passa voando sem dizer de onde ele esta tirando essas informações. Vi um outro post sobre a função novasCategorias, mas mesmo assim não entendi, por isso insisto na pergunta.

Grato

1 resposta

OIá, Wagner!

O instrutor faz uma refatoração no código, e ao invés de passar só o array, ou seja, this.categorias, da classe Categorias, agora ele passa toda a classe, com seus atributos e métodos, tudo isso para associar os dois métodos, inscrever() e notificar(), com a lista de categorias. As informações de categorias continuam vindo do array de categorias, só que agora o componente lista de categorias não recebe só o array mas sim todo o objeto Categorias, isto é, da classe Categorias.

Para usar o método inscrever é preciso que tenhamos certeza que o objeto já tenha sido criado, por isso o uso do componentDidMount() . A explicação sobre o ciclo de vida dos componentes React é um pouco complicada para explicar por aqui, por isso eu deixo um Alura+ muito bom sobre esse assunto Aqui.

Para fazer a notificação é preciso passar um evento para o método notificar, e esses eventos são funções. Por isso existe func => func(this.categorias), pois, o método notificar() vai receber uma função e passar this.categorias para ela, e a função que foi passada para notificar() se encarrega de executar o que tiver que ser feito. No caso, como tá dentro de um forEach() essa tarefa será executada para cada item do array ao qual o forEach() está associado. Se quiser saber mais sobre esse tipo de função só clicar aqui.

Espero ter ajudado! Abraços.