ngOnChanges vs ngDoCheck. ChangeDetectionStrategy OnPush в Angular

Sdílet
Vložit

Komentáře • 43

  • @user-md8ng9ow9u
    @user-md8ng9ow9u Před 2 měsíci +1

    Огромное спасибо, лучшее объяснение ChangeDetectionStrategy OnPush так еще и вместе с ngOnChanges и ngDoCheck , круто что при объяснении все моменты четко проговариваются.

  • @denpulokas592
    @denpulokas592 Před 2 lety +6

    Спасибо большое за урок! Очень доходчиво объясняешь и подаёшь материал. На ютубе почти нет годного материала по Ангуляру, спасает твой канал!))

  • @koni.21
    @koni.21 Před 2 lety +7

    Спасибо за урок! Такого качественного материала как у вас на русскоязычных контентах не встречал. Респект!

  • @Kulibins1
    @Kulibins1 Před 2 lety +10

    Хороший материал 👍 Мне прям последние ролики нравятся, качество растёт от роликак к ролику.

  • @maratzinatulin2749
    @maratzinatulin2749 Před 2 lety +4

    Мощь, обычно в обучающих видео многие мелочи опускаются. Буду рад видеть ещё подобные видео.

  • @aleksandrm3466
    @aleksandrm3466 Před 2 lety +7

    Спасибо. Очень хороший контент. Лаконично и практично. Было бы здорово, еще немного больше практических примеров как можно использовать doCheck, best practice...

  • @grommaks
    @grommaks  Před 2 lety +10

    Привет всем)
    В этом видео рассмотрим как оптимизировать обновление компонента, но при этом сделать его немного глупее...как вы поняли, немного разберемся в умных и глубых компонентах.
    Все это завязано на методах жизненного цикла ngOnChanges и ngDoCheck
    Приятного просмотра 👍

  • @urchuk2006
    @urchuk2006 Před 2 lety +3

    Большое спасибо. Сейчас изучаю ангуляр и ваш канал мне очень помогает)

  • @user-rb3sw3ku6t
    @user-rb3sw3ku6t Před rokem +1

    Спасибо большое за такой подробный урок! Узнал много нового.

  • @gagosimonyan1986
    @gagosimonyan1986 Před 2 lety +4

    Спасибо за старания )

  • @mila4308
    @mila4308 Před rokem +1

    Спасибо большое за лекцию! Просто, доступно, интересно. Теперь все по полочкам в голове :)

  • @Leonidn1972
    @Leonidn1972 Před měsícem

    Thanks a lot.Usefull content.

  • @js3461
    @js3461 Před 2 lety +5

    Отлично подана информация, особенно для новичков. Я некоторые моменты, в том числе и обсуждаемый в этом ролике, осознал только через несколько месяцев работы на проекте. От себя хочу сказать, что в инпуты можно передавать observable и выводить в вёрстке через async pipe, в этом случае не нужно заботится о перерисовке при OnPush

    • @grommaks
      @grommaks  Před 2 lety

      Об этом я буду говорить в следующем плейлисте) но подход с передачей Observable мне не нравится, больше нравится распечатывать их в момент привязки

    • @G3tf
      @G3tf Před 2 lety +1

      @@grommaks я использую behaviorsubject так же в свсязке с async pipe в шаблоне

    • @grommaks
      @grommaks  Před 2 lety +1

      @@G3tf если subject пришёл из сервиса то круто) в компоненте мне кажется это оверхед:)

    • @G3tf
      @G3tf Před 2 lety +1

      @@grommaks и из сервиса бывает) и бывает из компонента родительского)

    • @grommaks
      @grommaks  Před 2 lety

      @@G3tf стараюсь обсервабл не передавать как параметр) но слышал что это как подход используется
      В компоненте использую если хочу на rxjs всю логику данных описать, тогда события перекидывают в Subject и в потоке обработка идёт, тоже подход со своими плюсами

  • @fed4wet
    @fed4wet Před 2 lety +1

    Одно из лучших видео по теме

  • @user-wq4jl9io4s
    @user-wq4jl9io4s Před 2 lety +2

    Cool

  • @danilbogatyrev8554
    @danilbogatyrev8554 Před 2 lety +1

    Спасибо, хороший урок!

  • @ilnurryazhapov9377
    @ilnurryazhapov9377 Před 2 lety +2

    отличный контент

  • @KolkhozDnepr
    @KolkhozDnepr Před 2 lety +3

    Спасибо за труды)) вопросик - а у тебя нет случайно на Гите проектика с реализованными хуками, чтоб скачать развернуть подебажить, посмотреть вживую как что за чем работает? То вроде все понятно, а чувствую что начну писать и буду тупить)) то искал там что-то подобное, везде без хуков пишут...

    • @grommaks
      @grommaks  Před 2 lety +2

      Только проект этого курса (ссылка в описании) 😺так нужно больше часов пытаться и будет эффект) по другому не получается учиться

  • @Wunderwaffe2333
    @Wunderwaffe2333 Před 2 lety +1

    perfect

  • @bukanaka
    @bukanaka Před 2 lety +4

    "Атомные" уроки))

    • @grommaks
      @grommaks  Před 2 lety +2

      Атомный самурай из one punch man сразу вспомнился)

  • @user-ez7hs2cz9u
    @user-ez7hs2cz9u Před rokem +1

    Спасибо за материал. Но есть вопросик: onPush реагирует ТОЛЬКО на input? на Http request, addEventListener, setTimeout и тд реагирует стратегия default?

    • @grommaks
      @grommaks  Před rokem +2

      При OnPush сработает на Input и на привязки событий в шаблоне, такие как (click) и прочие, также сработает если повесили HostListener
      Насчет прямого element.addEventListener или асинхронных вызовов, то это будет работать при default, так как zone.js будет это отслеживать.

  • @yevhenpantiukhov3621
    @yevhenpantiukhov3621 Před 2 lety +1

    Для разбора темы повторил урок. Дерево Апп-Парент-Чаилд компоненты. В Апп сделал два метода, один мутирует массив, другой меняет ссылку (так же как в видео), не добавлял никаких changeDetection:ChangeDetectionStrategy.OnPush . Так вот при мутации данные на экране не меняются ! Наставил консолей в ngDoCheck , массив изменяется, видно в консоли, а отображение нет, в видео иначе. Я то вообще категорически против мутаций, но просто интересно, Ангуляр изменился от снятия видео ?

    • @grommaks
      @grommaks  Před 2 lety

      Видео свежее, все актуально) спасибо за отзыв

    • @yevhenpantiukhov3621
      @yevhenpantiukhov3621 Před 2 lety +2

      Уже разобрался, моя ошибка. Я решил сократить код и просто печатал на прямую массив (я понимаю что это несколько странно). Так вот, если ссылка та же самая то изменения массива в таком случае вообще никак не вывести. Вряд ли это кому пригодиться (кто ж на прямую тупо массив выводит на экран), но вот такой интересный момент.

  • @iamantoon
    @iamantoon Před 2 měsíci

    Хочу спросить довольно общий вопрос про синхронизацию данных с сервером. Вот у меня есть Angular application, в нем нет роутинга, и в нем я делаю CRUD операции над данными. Они применяются, серверная часть срабатывает и меняется, но чтобы изменения увидеть визуально в клиенте, страницу нужно обновить. Как это исправить?

    • @grommaks
      @grommaks  Před 2 měsíci

      Думаю запросы в сервисе делаются
      Тогда данные в сервисе надо хранит в BehaviorSubject чтобы компонент мог подписаться на изменения
      Если запрос в компоненте, то возможно стоит OnPush стратегия определения изменений, тогда нужен вызов changeDetectionRef.markForCheck()
      В момент обновления данных внутри компонента

    • @iamantoon
      @iamantoon Před 2 měsíci

      ​@@grommaks пока что не получается, в сервисе у меня такое:
      getLists(){
      return this.http.get(this.baseUrl);
      }
      В компоненте, который это отображает такое:
      ngOnInit(): void {
      this.listsService.getLists().subscribe({
      next: lists => {
      this.lists = lists.lists;
      this.listsNames = lists.listNames;
      }
      })
      }
      А в компоненте, который вносит изменение на сервер вот такое:
      editList(){
      this.listsService.editList(this.id, this.name).subscribe({
      next: () => this.toastr.success("The list has been updated")
      })
      }

    • @iamantoon
      @iamantoon Před 2 měsíci

      Пока не получается сделать правильно, у меня такой код в сервисе:
      getLists(){
      return this.http.get(this.baseUrl);
      }
      Такой в компоненте, где эти данные отрисовуются:
      ngOnInit(): void {
      this.listsService.getLists().subscribe({
      next: lists => {
      this.lists = lists.lists;
      this.listsNames = lists.listNames;
      }
      })
      }
      Такой в компоненте, где данные меняются:
      editList(){
      this.listsService.editList(this.id, this.name).subscribe({
      next: () => this.toastr.success("The list has been updated")
      })
      }

  • @biovawan
    @biovawan Před 2 lety +1

    Есть ли смысл переходить на родные js приватные поля с помощью '#'? Тем самым получили бы:
    #array: User[] = [];
    @Input set array(val: User[]) {
    this.#array = val;
    }
    get array(): User[] {
    this.#array;
    }

    • @grommaks
      @grommaks  Před 2 lety +1

      Спасибо за интересный вопрос
      Пока приходится поддерживать версии от 6 и выше, а также поддерживать IE в некоторых проектах, то я бы не стал переходить
      Явной рекомендации использовать такой подход нет, под капотом TS может сам это оптимизировать если это важно.
      Вывод, я бы не стал спешить, но знать о новинках нужно

    • @biovawan
      @biovawan Před 2 lety +1

      @@grommaks благодарю за скорый ответ и за твои труды! Твой контент уникален, на могу взгляд) желаю успехов!