Как обновить Angular OnPush-компонент без замены на signal?

Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.

Короткий ответ

Что ответить на собеседовании

Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.

Подробный разбор

Ответ с пояснениями

Условие

OnPush-компонент получает объект user через input. Родитель меняет user.name на месте, сохраняя ссылку; UI не обновляется в ожидаемый момент. Signals в этой задаче не используются. Какие варианты исправления доступны?

Ответ

Предпочтительно передавать новый объект при изменении input. Для асинхронного потока можно использовать AsyncPipe; при управляемом внешнем обновлении — корректно вызвать markForCheck.

Immutable-обновление делает изменение входа явным и не требует ручного проталкивания UI. MarkForCheck помечает нужную ветку, а detectChanges запускает локальную проверку немедленно и требует большей осторожности. Поведение планирования зависит от конфигурации Angular, включая zoneless; не стоит лечить контракт данных случайным setTimeout. Выбирайте один понятный путь обновления, а не набор обходов change detection.

Источник: angular.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее