Параметры селектора
Поведение мемоизированных селекторов можно настроить на глобальном уровне с помощью свойства 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
.