Ciclo de Vida do Componente
1 min de leitura
Componente não é só um arquivo parado. Ele nasce, recebe dados, passa por verificações, renderiza, pode reagir à DOM pronta e precisa limpar recursos quando sai da tela.
O ciclo de vida importa quando você precisa executar algo no momento certo: carregar dado, reagir a mudança de input, acessar elementos renderizados ou encerrar uma subscription.
A ordem mental
Não precisa decorar tudo no primeiro dia, mas precisa conhecer o mapa:
constructorcria a classe. Use para injeção simples, não para buscar dado.ngOnChangesroda quando inputs mudam.ngOnInitroda uma vez depois da inicialização dos inputs.ngDoCheckpermite checagem manual, mas é raro e fácil de usar mal.ngAfterContentInitroda depois do conteúdo projetado comng-content.ngAfterContentCheckedroda após a checagem desse conteúdo.ngAfterViewInitroda depois da view do componente estar pronta.ngAfterViewCheckedroda após a checagem da view.afterNextRenderroda depois da próxima renderização completa da aplicação.afterEveryRenderroda depois de toda renderização completa.ngOnDestroyroda antes do componente ser destruído.
Um caso comum
Buscar dados iniciais costuma caber em ngOnInit:
import { Component, OnInit, inject } from "@angular/core"
@Component({
selector: "app-trilhas",
standalone: true,
template: `...`,
})
export class TrilhasComponent implements OnInit {
private readonly service = inject(TrilhasService)
ngOnInit() {
this.service.carregar()
}
}
Mas acessar algo da view, como uma referência de elemento ou componente filho,
normalmente pertence a ngAfterViewInit.
ngAfterViewInit() {
console.log("view pronta")
}
Limpando recursos
Se você cria timer, listener ou subscription manual, precisa limpar. O caminho
clássico é ngOnDestroy. No Angular moderno, DestroyRef também ajuda a
registrar limpeza perto do código que criou o recurso.
const destroyRef = inject(DestroyRef)
const id = setInterval(() => console.log("tick"), 1000)
destroyRef.onDestroy(() => {
clearInterval(id)
})
Três coisas pra levar deste nó:
ngOnInitnão é o ciclo de vida inteiro. Ele é só o ponto mais comum.- Hooks de view e content existem para momentos diferentes.
- Toda inscrição manual precisa de estratégia de limpeza.
Dica: antes de usar um hook, pergunte "isso depende mesmo desse momento?". Se for só valor derivado, talvez caiba melhor em template,
computedou service.
No próximo nó, vamos conectar componentes entre si com inputs e outputs.
// Quiz
Qual hook costuma ser usado quando você precisa acessar a view já inicializada?