> Что такое Lifecycle Hooks в Angular и какие из них используются? (Angular)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: LeverX
Стек: Angular
> Пример ответа
Короткий ответ
Lifecycle hooks - это методы в Angular, которые вызываются автоматически на разных этапах жизни компонента или директивы. Основные hooks: ngOnChanges, ngOnInit, ngDoCheck, ngAfterContentInit, ngAfterContentChecked, ngAfterViewInit, ngAfterViewChecked и ngOnDestroy. Наиболее часто используются ngOnInit для инициализации данных и ngOnDestroy для очистки ресурсов.
Подробное объяснение
Lifecycle hooks в Angular - это интерфейсы, которые компонент или директива могут реализовать для выполнения кода в определённые моменты своего жизненного цикла. Angular вызывает эти методы в строгом порядке:
- ngOnChanges - вызывается при изменении входных свойств (
@Input), получает объектSimpleChangesс предыдущими и новыми значениями. - ngOnInit - вызывается один раз после первого
ngOnChanges, когда компонент инициализирован и входные свойства установлены. - ngDoCheck - вызывается при каждой проверке изменений, позволяет реализовать собственную логику обнаружения.
- ngAfterContentInit - вызывается один раз после проецирования внешнего контента через
<ng-content>. - ngAfterContentChecked - вызывается после каждой проверки проецированного контента.
- ngAfterViewInit - вызывается один раз после инициализации представления компонента и дочерних компонентов.
- ngAfterViewChecked - вызывается после каждой проверки представления.
- ngOnDestroy - вызывается перед уничтожением компонента, используется для отписки от observable, очистки таймеров и других ресурсов.
Порядок выполнения для родительского и дочернего компонентов: сначала hooks родителя, затем дочернего, за исключением ngAfterViewInit и ngAfterViewChecked, которые выполняются снизу вверх.
На практике
Наиболее часто используемые hooks:
- ngOnInit - для загрузки данных, инициализации форм, подписки на сервисы.
- ngOnDestroy - для отписки от observable (через
takeUntilилиunsubscribe), очистки интервалов/таймаутов, удаления event listeners. - ngOnChanges - для реакций на изменения входных данных, валидации или трансформации.
- ngAfterViewInit - для работы с DOM элементами после их рендера, интеграции с сторонними библиотеками.
Важно помнить, что ngDoCheck вызывается очень часто (при каждом change detection cycle), поэтому его использование должно быть минимальным для избежания проблем с производительностью.
Пример кода
TYPESCRIPTimport { Component, OnInit, OnDestroy, OnChanges, SimpleChanges, Input } from '@angular/core';import { Subscription } from 'rxjs';@Component({selector: 'app-user-profile',template: `<h2>{{ user.name }}</h2>`})export class UserProfileComponent implements OnInit, OnDestroy, OnChanges {@Input() user: any;private subscription: Subscription;ngOnChanges(changes: SimpleChanges): void {if (changes['user']) {console.log('User changed:', changes['user'].currentValue);}}ngOnInit(): void {console.log('Component initialized');this.subscription = someService.getData().subscribe();}ngOnDestroy(): void {if (this.subscription) {this.subscription.unsubscribe();}console.log('Component destroyed, subscription cleaned');}}
Как отвечать на собеседовании
Начни с краткого определения lifecycle hooks и их назначения. Перечисли основные hooks в порядке выполнения, выделив самые важные (ngOnInit, ngOnDestroy). Приведи практический пример использования каждого из них. Упомяни, что hooks реализуются через интерфейсы (например, implements OnInit). Если спросят про порядок выполнения, объясни разницу между родительским и дочерним компонентами. Не углубляйся в редкие hooks, если не спрашивают специально.
Что проверяет интервьюер
- Понимание жизненного цикла компонента и порядка вызова hooks.
- Знание, какие hooks обязательны, а какие опциональны.
- Умение применять hooks на практике (особенно
ngOnInitиngOnDestroy). - Понимание разницы между hooks для контента и представления.
- Осознание проблем производительности при неправильном использовании
ngDoCheck.
Типичные ошибки
- Путаница между
ngOnInitи конструктором - конструктор вызывается до hooks и не должен содержать бизнес-логику. - Забывают реализовать интерфейс (например,
implements OnInit) - хотя Angular вызовет метод и без него, это считается плохой практикой. - Не отписываются от observable в
ngOnDestroy, что приводит к утечкам памяти. - Используют
ngDoCheckдля частых операций, вызывая проблемы с производительностью. - Пытаются изменять входные свойства внутри
ngOnChanges, что может вызвать бесконечный цикл. - Путают
ngAfterViewInitиngAfterContentInit- первый для шаблона компонента, второй для проецированного контента.
> Похожие задачи по frontend
Что такое компоненты, модули, сервисы, интерцепторы и директивы в Angular?
Какие типы пайпов бывают в Angular и в чем разница между pure и impure пайпами?
Как реализовать обработку ввода пользователя в поисковую строку в Angular с использованием реактивных форм
В чем разница между Ahead-of-Time и Just-in-Time компиляциями в Angular?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью