在这个ngrx 示例组件中,在第 27 行,您将看到
this.books$ = store.select(fromRoot.getSearchResults);
选择器函数getSearchResults由其他选择器函数组成,最里面的选择器函数是getSearchState和getBoosState。
我的问题是
- 是
store.selectRxJS Observable 函数还是 ngrx 函数? store.select该函数如何传递存储上下文以便最里面的函数可以访问它?
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接收状态并将其传递给组合getBookEntities和getSearchBookIds选择器。getBookEntities接收状态并使用 选择书籍状态getBooksState,将其传递给fromBooks.getEntities.getSearchBookIds接收状态并使用 选择书籍状态getSearchState,将其传递给fromBooks.getEntities.