УГЛОВОЙ

Google I/O 2023 — Начало работы с сигналами Angular

Angular 16 вводит реактивность через сигналы. Что такое реактивность?

Angular 16 вводит реактивность через сигналы. Давайте потратим немного времени, чтобы прояснить, что означает реактивность, прежде чем перейти к трем реактивным примитивам.



Что мы понимаем под реактивностью?

Реактивность — это декларативный способ выражения распространения изменений.

Пример электронной таблицы, предложенный на Google I/O, на самом деле довольно прост!

Посмотрите на изображение выше. "Если вы обновите фамилию Марка, вы ожидаете, что полное имя тоже изменится".

Именно так и происходит! Значение Полного имени получается из значения в первой ячейке и значения в последней ячейке.

Это то, что реактивность в Angular хочет сделать. Если переменная A зависит от других переменных, A будет обновлена, как только другие переменные изменятся. В следующем примере, учитывая текущее значение B и текущее значение C, A равно 1.

Другими словами, «реактивность позволяет платформе понимать распространение изменений посредством отслеживания зависимостей».

Детальное распространение изменений

Распространение изменений очень детальное, и оно блестит на более сложных примерах, где одна и та же переменная зависит от нескольких других переменных, даже если не напрямую.

В следующем примере значение A по-прежнему зависит от B и C. Однако C зависит от D. Когда значение D становится равным 4, срабатывает побочный эффект, уведомляющий о зависимых значениях (в данном случае только C).

Следовательно, C становится 4, а A становится 7.

Поскольку распространение изменения уведомляет только о зависимых значениях, а B и E не зависят от C или D, оба B и E не затрагиваются.

Обратите внимание: если вы посмотрите Переосмысление реактивности с угловыми сигналами, вы увидите, что стрелки идут в другую сторону. На видео стрелками показаны зависимости переменной. Стрелки указывают на: От какого значения я завишу?.

В отличие от видео, в этом посте стрелки показывают, как передаются данные и какие зависимости будут обновляться. Я нахожу этот способ мышления более близким к тому, как вы бы использовали BehaviorSubject в RxJS. Стрелки указывают на: Какое значение будет обновлено?.

Каковы три реактивных примитива?

Signal, Computed и Effect — это три реактивных примитива, представленные в качестве предварительной версии для разработчиков в Angular 16.

Сигналы

Сигнал — это значение, которое может сообщить Angular, когда оно изменится. Если вы знакомы с BehaviorSubject, вы можете думать о Сигналах как о BehaviorSubject без необходимости подписываться.

В приведенном выше примере электронной таблицы значение в первой ячейке и значение в последней ячейке являются сигналами.

first = signal("Mark");
last = signal("Rocket");

Рассчитано

Вычисляется новое значение, когда изменяется любой из сигналов, от которого он зависит. В следующем примере fullname вычисляется из значений сигналов first и last.

Вычисленное значение fullname будет автоматически обновляться всякий раз, когда изменяются сигналы first и last.

first = signal("Mark");
last = signal("Rocket");
fullname = computed(() => first() + " " + last());

Эффект

Побочная операция, которая считывает значение сигналов. Некоторые из причин, по которым вы можете захотеть использовать эффекты, упомянуты в видео и приведены ниже:

  • запуск сетевых запросов
  • выполнение действий рендеринга
  • чтение или изменение DOM вручную

В следующем примере вы будете видеть изменения в консоли каждый раз, когда значение сигнала last изменяется.

first = signal("Mark");
last = signal("Rocket");
fullname = computed(() => first() + " " + last());

effect(() => console.log("Last name changed" + last()));

В этот момент они попадают в пример. Найдите пример и код здесь.

Подведение итогов

Вот список ключевых моментов, о которых следует помнить:

  • Angular 16 хочет привнести реактивность повсюду. Это должно помочь уменьшить работу, которую Angular выполняет для поддержания DOM в актуальном состоянии.
  • Обнаружение изменений запускается только тогда, когда сигнал изменился.
  • Сигналы здесь, чтобы остаться. Они обратно совместимы, и команда Angular делает их совместимыми с решениями для управления состоянием, такими как NGRX и NGXS.
  • Среди следующих шагов они упомянули полностью бесзональные приложения.

Найдите пример с использованием сигналов, вычислений и эффектов, а также методов сигналов.



Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .