Параметры селектора

Поведение мемоизированных селекторов можно настроить на глобальном уровне с помощью свойства selectorOptions в параметрах, переданных в вызов NgxsModule.forRoot (см. Параметры). Эти параметры также могут быть предоставлены с помощью декоратора @SelectorOptions на уровне класса или метода, чтобы настроить поведение селекторов в этой области. Доступны следующие варианты:

suppressErrors

  • true приведет к тому, что любая ошибка в селекторе приведет к тому, что селектор вернет undefined.
  • false приводит к тому, что эти ошибки распространяются по стеку, что инициирует оценку селектора, вызвавшего ошибку.

ПРИМЕЧАНИЕ. Значение по умолчанию для этого параметра будет изменено на false в NGXS v4. Значение по умолчанию в NGXS v3.x - true.

injectContainerState

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

ПРИМЕЧАНИЕ. Это не идеально, поэтому этот параметр по умолчанию будет изменен на false в NGXS v4.

  • false предотвратит внедрение модели состояния контейнера в качестве первого параметра метода селектора (определенного в классе состояния), который присоединяется к другим селекторам для его параметров. Значение по умолчанию в NGXS v3.x - true.

См. Здесь для примеров того, как этот параметр влияет на ваши селекторы.

Мы рекомендуем устанавливать эти параметры на глобальном уровне, если вы не переводите свое приложение с одного поведения на другое, где вы можете использовать этот декоратор для введения этого перехода по частям. Например, NGXS v4 внесет изменения в селекторы, которые повлияют на методы, использующие объединенные селекторы (см. Ниже).

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

Здесь вы можете видеть, что при использовании декоратора Selector с аргументами внутри класса состояния он будет вводить модель состояния класса состояния в качестве первого параметра, за которым следуют другие селекторы в том порядке, в котором они были переданы в подписи. Это поведение обеспечивается параметром injectContainerState, который по умолчанию имеет значение true в NGXS v3.x.

Записанные селекторы будут пересчитывать при изменении любого из значений их входных параметров (независимо от того, используют ли они их или нет). В случае описанного выше поведения, когда модель состояния класса состояния вводится в качестве первого входного параметра, селекторы будут пересчитывать любое изменение в этой модели. Вы заметите, что селектор happyLocalPanda имеет зависимость state, даже если он не используется. Он будет пересчитывать при каждом изменении до state, игнорируя тот факт, что значение firstLocalPanda могло не измениться. Это не идеально, поэтому в NGXS v4 поведение по умолчанию меняется.

В NGXS v4 и выше значение по умолчанию для параметра селектора injectContainerState изменится на false, в результате селекторы будут более оптимизированы, поскольку они не получают модель состояния, вводимую в качестве первого параметра, если явно не запрашивается. С этой настройкой селекторы должны быть определены следующим образом:

Теперь happyLocalPanda будет пересчитываться только при изменении выходного значения селектора firstLocalPanda.