2

在这个ngrx 示例组件中,在第 27 行,您将看到

this.books$ = store.select(fromRoot.getSearchResults);

选择函数getSearchResults由其他选择器函数组成,最里面的选择器函数getSearchStategetBoosState

我的问题是

  • store.selectRxJS Observable 函数还是 ngrx 函数?
  • store.select该函数如何传递存储上下文以便最里面的函数可以访问它?
4

1 回答 1

4

select是一个 RxJS 操作符,它被定义@ngrx/core并绑定为Store.

TheStore是一个可观察对象,它在接收到一个动作并通过其组合的 reducer 传递所述动作后发出状态。因此,操作员接收状态作为可观察对象select发出的值。Store

如果您对状态本身的保存位置感到好奇,可以Store使用Stateobservable作为它的source. 并且Stateobservable是一个 RxJS BehaviorSubject

选择getSearchResults器由reselect. 该createSelector函数创建一个选择器,将其接收状态传递给getBookEntitiesandgetSearchBookIds选择器 - 然后组合/连接其结果。

reselect用于创建选择器,因为它的选择器是记忆的。也就是说,选择器结果被缓存/记忆,并且选择器仅在输入更改时重新运行。这可以显着提高效率,因为否则每次 store observable 发出状态时都会重新运行选择器。

所以流程是:

  • State观察对象发出状态。
  • Stateobservable 是 的来源,Store所以它也发出状态。
  • getSearchResults在 . 上的select运算符中使用Store
  • getSearchResults接收状态并将其传递给组合getBookEntitiesgetSearchBookIds选择器。
  • getBookEntities接收状态并使用 选择书籍状态getBooksState,将其传递给fromBooks.getEntities.
  • getSearchBookIds接收状态并使用 选择书籍状态getSearchState,将其传递给fromBooks.getEntities.
  • 然后将书籍和搜索 ID 组合起来,结果就是选择器返回的结果。
于 2017-03-12T19:52:51.897 回答