Hoje vamos ver o que é o lifecycle hook e como usar, porém precisamos entender um pouco do ciclo de vida (lifecycle) do Angular.

Vamos pensar no ciclo de vida como o que conhecemos mesmo, nascemos, vivemos e morremos, o Angular também trabalha desta forma, usamos várias fases desde criação até a destruição do componente ou o que quer que seja.

E não necessariamente ao carregar a aplicação todos os ciclos de vida são ativados ao mesmo tempo, podemos chamar um componente ao realizar determinada ação e assim dar início ao ciclo de vida dele. Então o Angular nos fornece ganchos (Hooks) para lidar com essas situações, e a ordem de execução é a seguinte:

  • ngOnInit: é executado uma vez quando o componente é inicializado;
  • ngOnChanges: executado também uma vez na criação do componente e toda vez que ele sofrer alguma mudança;
  • ngDoCheck: executado a cada mudança que o ngOnChange não detecta;
  • ngOnDestroy: executado na destruição do componente.

Além desses existem outros quatros hooks dentro do ngDoCheck:

  • ngAfterContentInit: sempre que um conteúdo vindo de uma fonte externa do componente é inserido;
  • ngAfterContentChecked: quando o conteúdo externo é verificado;
  • ngAfterViewInit: executado logo após os dados dos filhos e do próprio componente ser inicializado;
  • ngAfterViewChecked: sempre que é detectado uma alteração do conteúdo é chamado esse cara.

Funcionamento do Lifecycle Hook

Para a gente iniciar um hook, devemos atender a duas coisas e são elas fazer a implementação da interface do hook e criar o método especial com seu nome.

Vamos ver como seria a criação de um ngOnInit():

Podemos notar que o nome dado a interface do OnInit é a mesma do método, porém sem o ng na frente dele, assim facilitando o entendimento da situação e assim segue para todos os outros hooks.

Uma dica de boas práticas, sempre faça a implementação da interface, mesmo que não seja obrigatório para o funcionamento. E caso queira utilizar mais de um hook fica assim as importações e chamadas:


OnInit

  • ngOnInit: é executado uma vez quando o componente é inicializado;

O OnInit é excelente caso você precise fazer muitas coisas antes de inicializar o componente, podendo ser algum tipo de configuração.

Também usamos eles para atribuir Observables nas variáveis de componente, parâmetros de rotas também é muito legal de se usar aqui caso queira recuperar algum tipo de informação vindo delas.

Usamos também em alguns reactive forms e precisamos de alguns passos para funcionar, começamos criando um objeto FormGroup junto com o serviço de FormBuilder.

Vamos dar uma olhada na sintaxe da coisa:

Não podemos esquecer de iniciar o formgroup dentro do OnInit para os valores não iniciarem como Undefined e assim evitando erros.

OnChanges

  • ngOnChanges: executado também uma vez na criação do componente e toda vez que ele sofrer alguma mudança;

Vamos ver um exemplo de como usar e como funciona:

Nessa lógica ao digitar o seu nome no campo e atualizar ele vai aparecer junto com o “Troquatte” e assim o OnChange é chamado.Vale ressaltar que o OnChange também pode receber um parâmetro opcional chamado “SimpleChanges” que contém os valores do “@Input()”, vamos dar uma olhada na sintaxe dele.

E segue as propriedades:

Vou falar um pouco sobre cada propriedade:

  • CurrentValue: contém o valor que está no Input no momento;
  • PreviousValue: contém o valor de Input antes de qualquer tipo de atualização no conteúdo dele;
  • FirstChange: retorna true ou false caso seja a primeira alteração sofrida no conteúdo;
  • IsFristChange: outro método que retorna true se for a primeira alteração sofrida no conteúdo.

DoCheck

  • ngDoCheck: executado a cada mudança que o ngOnChange não detecta;

DoCheck é um gancho de ciclo de vida usado para invocar uma função de detecção de alterações personalizada para uma diretiva.

O Angular dispara o gancho DoCheck após cada detecção de alteração.

DoCheck é usada para capturar quaisquer alterações dentro do componente angular que não podem ser capturadas de outra maneira, então basicamente esta função “ngDoCheck()” será executada toda vez que houver algum tipo de alteração no Componente Angular.

Ele será executado quando um valor de variável for alterado para que coisas básicas também possam ser capturadas desta função.

Portanto, neste método, estamos lidando com todos os tipos de coisas com instruções if-else. pois a função será executada toda vez que houver uma alteração no componente então aqui está um código de exemplo que você pode conferir.

ngDoCheck e ngOnChanges não devem ser implementados juntos no mesmo componente.

OnDestroy

  • ngOnDestroy: executado na destruição do componente.

Por fim, mas não menos importante vamos falar um pouco do “OnDestroy”, que é startado antes do componente ser finalizado ou destruído (por conta do nome) e assim temos uma maneira de liberar ciclos lógicos completos.

Com o “OnDestroy” podemos evitar também memory leak e assim problemas de desempenho e quem sabe até erros em projetos.

Uma das principais causas de memory leak em Angular é com o Observable assinamos ele e depois não destruímos, deixando assim ele consumindo memória atoa. Imagina que esse componente é iniciado e destruído 3 vezes, vamos ficar com 3 Observables em memória que não estão sendo usados.

Aqui usamos o “unsubscribe() e o “ngOnDestroy()” para resolver esses problemas de cancelamento de assinatura.

Lembrando que para uso de HTTP você não precisa destruir o subscribe ele se destroi sozinho!

Nesse post vimos uma parte muito importante no desenvolvimento Angular, lidamos bastante com desempenho e também com o controle total dos componentes e suas mudanças ao longo da vida dele. Como evitar alguns erros de iniciar algum valor como Undefined.

Tenha uma carreira
Front-end de Sucesso!

Ebook - JORNADA FRONT-END

Fruto de mais de 7 anos estudando e trabalhando com Front-end, a "Jornada Front-end - O Guia Definitivo" é um manual completo para todos que querem subir em suas carreiras do zero ou subir do seu nível atual.

Ebook enviado com sucesso! Verifique sua caixa de e-mail.

Share This