> В чем разница между markForCheck и detectChanges в Angular Change Detection? (Angular)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: LeverX

Стек: Angular

> Пример ответа

markForCheck и detectChanges - это методы из ChangeDetectorRef, используемые для управления обнаружением изменений в Angular, но с разными целями и поведением.

  • markForCheck - помечает текущий компонент и всех его предков (вверх по дереву) как "грязные" (dirty), чтобы при следующем цикле обнаружения изменений (например, при асинхронном событии, таймере или вызове ApplicationRef.tick()) Angular проверил их и обновил представление. Он не запускает проверку немедленно, а только планирует её. Используется, когда компонент использует стратегию OnPush и нужно сообщить Angular, что входные данные или внутреннее состояние изменились, но сам цикл обнаружения изменений ещё не начался.

  • detectChanges - немедленно запускает обнаружение изменений для текущего компонента и всех его дочерних элементов (вниз по дереву). Это синхронный вызов, который выполняет проверку и обновление представления прямо сейчас. Полезен в ситуациях, когда нужно принудительно обновить представление вне обычного цикла Angular, например, после ручного изменения DOM или в интеграции с библиотеками, не использующими Zone.js.

Ключевое различие: markForCheck откладывает проверку до следующего цикла, а detectChanges выполняет её немедленно. markForCheck работает "вверх" (к корню), а detectChanges - "вниз" (к потомкам). Выбор зависит от стратегии обнаружения изменений и контекста: для OnPush чаще используют markForCheck, для форсированного обновления - detectChanges.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью