select
是一个 RxJS 操作符,它被定义@ngrx/core
并绑定为Store
.
TheStore
是一个可观察对象,它在接收到一个动作并通过其组合的 reducer 传递所述动作后发出状态。因此,操作员接收状态作为可观察对象select
发出的值。Store
如果您对状态本身的保存位置感到好奇,可以Store
使用State
observable作为它的source
. 并且State
observable是一个 RxJS BehaviorSubject
。
选择getSearchResults
器由reselect
. 该createSelector
函数创建一个选择器,将其接收状态传递给getBookEntities
andgetSearchBookIds
选择器 - 然后组合/连接其结果。
reselect
用于创建选择器,因为它的选择器是记忆的。也就是说,选择器结果被缓存/记忆,并且选择器仅在输入更改时重新运行。这可以显着提高效率,因为否则每次 store observable 发出状态时都会重新运行选择器。
所以流程是:
- 可
State
观察对象发出状态。
State
observable 是 的来源,Store
所以它也发出状态。
getSearchResults
在 . 上的select
运算符中使用Store
。
getSearchResults
接收状态并将其传递给组合getBookEntities
和getSearchBookIds
选择器。
getBookEntities
接收状态并使用 选择书籍状态getBooksState
,将其传递给fromBooks.getEntities
.
getSearchBookIds
接收状态并使用 选择书籍状态getSearchState
,将其传递给fromBooks.getEntities
.
- 然后将书籍和搜索 ID 组合起来,结果就是选择器返回的结果。