NgRx Selector - холодное или горячее наблюдаемое - PullRequest
0 голосов
/ 17 июня 2020

Я знаю, что хранилище ngrx является горячим наблюдаемым, основываясь на следующем ответе: Является ли @ ngrx / store горячим или холодным наблюдаемым?

Мой вопрос в том, является ли селектор горячим или холодно?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Селекторы - это чистые функции, которые не наблюдаются.

Вероятно, вы спрашиваете об операторе или функции select.

this.store.pipe(select(...)) // or this.store.select(...)

Это просто

this.store.pipe(
  map(...),
  distinctUntilChanged()
)

map и distinctUntilChanged на самом деле не делают наблюдаемое горячее или холодное. Они подписываются на свой источник, только если подписаны на него, поэтому данные будут проходить через них, только если вы подпишетесь. Но если источник (например, магазин) получает товары от производителей до того, как вы подпишетесь (т.е. горячо), вы их не получите.

Таким образом, подписка на this.store.pipe(select(...)) не скажет магазину о начале производства значений, магазин будет выдавать значения перед этим, поскольку он активно слушает своих производителей (редукторы и действия), но select не будет слушайте магазин, и никакие данные не будут проходить через него, если вы не подпишетесь.

2 голосов
/ 17 июня 2020

Это холодно, потому что он не будет подписываться на источник, пока кто-то не подпишется на него.

Большинство операторов, за исключением операторов share и publish, создают холодные наблюдаемые.

...