NgRx, инфраструктура реактивного управления состоянием для Angular, выпустила версию 22, поставляя утилиты для настройки API ресурсов Angular, динамические глубокие сигналы для типов объединения, новый SignalStore помощник по набору текста и совместимость с ESLint v10.
Основным нововведением являются расширения ресурсов, предоставляемые посредством новой экспериментальной версии. @ngrx/signals/resource точка входа. Angular’s resource и httpResource Сброс API value() к undefined при перезагрузке и выбрасывать при чтении в состоянии ошибки. Расширения ресурсов оборачивают существующий ресурс и исправляют только его поведение, сохраняя при этом исходный тип ресурса.
Включены четыре встроенных расширения, а также provideResourceExtensions функция, которая регистрирует значения по умолчанию на уровне приложения, маршрута или компонента. В исходном RFC Марко Станимирович объяснил, что изменение поведения ошибок также является предпосылкой для более глубокого SignalStore интеграция, поскольку «как только ресурс входит в состояние ошибки, любые последующие patchState вызов будет сброшен, потому что он читает value() внутренне».
Предложение было хорошо встречено: Манфред Штайер ответил: «Обожаю!» и предложил сигнал активации, в то время как другой комментатор попросил паритета с сигналом SolidJS createResourceнапример, доступ к текущему значению внутри загрузчика.
В обзоре сообщества по DEV отмечается, что аналогичное поведение можно реализовать с помощью Angular. snapshot() и дополнительную логику состояния, но «с расширениями ресурсов вы остаетесь на самом ресурсе», сохраняя значение доступным для записи и сохраняя более конкретную информацию. httpResource тип.
TanStack Query для Angular предлагает аналогичное сохранение предыдущих данных, когда ключи запроса изменяются с помощью PlaceholderData: KeepPreviousData. Кроме того, пакет инструментов NgRx Toolkit сообщества withResource поддерживает негенерацию неопределенное значение
и предыдущее значение
; стратегии обработки ошибок для SignalStore, начиная с версии 20.6.0.
Версия 22 также делает глубокие сигналы динамичными. Раньше срез состояния, набранный как объединение (естественный способ моделирования «еще не загружен»), сворачивался в один плоский сигнал. Теперь каждый литерал объекта получает свой собственный DeepSignal, доступный после сужения с помощью проверки.
новый SignalStoreFeatureType Утилита извлекает состояние и элементы фабрики функций, поэтому пользовательские функции могут повторно использовать их в качестве входных типов, а не переобъявлять их вручную. В другом месте, @ngrx/store-devtools получает actionCreators возможность отправки из Redux DevTools и @ngrx/eslint-plugin теперь поддерживает ESLint v10, отказавшись от ESLint v8 и устаревшего формата .eslintrc. Сайт документации также приобрел светлую тематику.
Разработчикам для обновления необходимы Angular 22, TypeScript 6.0 и RxJS ^6.5 или ^7.5, и они могут работать ng update @ngrx/store@22или ng update @ngrx/signals@22 для проектов только для SignalStore. Для большинства критических изменений предусмотрена автоматическая миграция, подробно описанная в руководстве по миграции на версию 22 и журнале изменений. Командам также следует принять во внимание, что в Angular 22 изменилось время использования ресурсов: один из разработчиков сообщил о неудачных тестах, которые впоследствии были добавлены в примечания к выпуску Angular как критические изменения.
В теме Hacker News об Angular v22 один пользователь написал:
NGRX Signals — это новый подход, и он прекрасен. Вместо пяти файлов для подключения состояния обычно используется один файл и все/большая часть функций размещаются вместе.
Хотя другой заметил, что:
Современный Angular НАМНОГО приятнее в использовании, чем времена версии 2 (или даже дни версии 4, когда я впервые начал с ним работать). Многие необходимые шаблоны в настоящее время не нужны. И даже RxJS и NgRX становятся все менее и менее необходимыми в использовании, и это здорово.
NgRx — это управляемая сообществом платформа с открытым исходным кодом для создания реактивных приложений Angular, обеспечивающая глобальное управление состоянием с помощью Store и эффектов наряду с SignalStore на основе сигналов. Его спонсируют Nx и CodeRabbit, а его исходный код доступен на GitHub.