Selectors¶
В NgRx селекторы представляют собой чистые функции и используются для получения определенных частей глобального состояния. Отличительные особенности селекторов:
- Мобильность;
- Мемоизация;
- Возможность построения композиции селекторов;
- Легкость тестирования.
createSelector()¶
Селекторы создаются с помощью функции NgRx createSelector(), которая может принимать неограниченное количество функций, каждая из которых возвращает определенную часть состояния. При этом самой последней функции, которая и возвращает конечный результат, в качестве аргументов передаются результаты первых функций.
Для всех примеров этой главы будем использоваться следующее состояние.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Пример получения данных состояния.
1 2 3 4 5 6 | |
Созданные NgRx селекторы могут быть использованы для создания других селекторов (композиция).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
select()¶
Для использования селектор необходимо передать функции NgRx select(), которая вызывается в методе pipe() хранилища (экземпляра объекта Store).
1 2 3 4 5 6 7 | |
Вы также можете совместно с NgRx select() использовать имеющиеся в RxJS операторы.
1 2 3 4 5 6 | |
Для получения состояния на основе данных, отсутствующих в хранилище, вторым параметром функции NgRx select() передайте эти данные и они будут доступны в последней функции в качестве последнего параметра.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
И далее в компоненте.
1 2 3 | |
createFeatureSelector()¶
Для удобства получения срезов состояния верхнего уровня глобального объекта используйте функцию NgRx createFeatureSelector(), которая строковым параметром принимает один из верхних ключей.
1 2 3 | |
Мемоизация¶
Мемоизация позволяет избежать повторных вычислений при вызове функции, которая уже вызывалась ранее. При первом вызове запоминается возвращаемое функцией значение, которое будет пересчитано и обновлено при любом изменении в наборе параметров, в противном же случае будет возвращаться сохраненное значение.
Для сброса (удаления) сохраненного значения необходимо вызвать у селектора метод release(). Настоятельно рекомендуется его использовать, если вычисленные данные занимают в памяти много места и в последующем вам больше не понадобятся.
1 2 3 4 5 6 7 | |