在这个ngrx example component中,在第27行,您将看到
this.books$ = store.select(fromRoot.getSearchResults);
选择器功能getSearchResults
由其他选择器功能组成,innermost selector functions为getSearchState
和getBoosState
。
我的问题是
store.select
是RxJS Observable函数还是ngrx函数?store.select
函数如何传递商店上下文,以便最里面的函数可以访问它?答案 0 :(得分:4)
select
是一个RxJS运算符,它在@ngrx/core
中定义,并作为Store
的方法绑定。
Store
是一个可观察的,它在收到动作后发出状态并通过其组合的减速器传递了所述动作。因此select
运算符接收状态作为Store
可观察值发出的值。
如果您对状态本身的位置感到好奇,Store
会使用State
可观察的as its source
。 State
observable是RxJS BehaviorSubject
。
getSearchResults
选择器使用reselect
组成。 createSelector
函数创建一个选择器,将其收到的状态传递给getBookEntities
和getSearchBookIds
选择器 - 然后将其结果合并/连接。
reselect
用于创建选择器,因为它的选择器是memoized。也就是说,选择器结果被缓存/记忆,并且只有在输入改变时才重新运行选择器。这可以显着提高效率,因为每次商店可观察到的状态都会重新运行选择器。
所以流程是:
State
观察者会发出状态。State
observable是Store
的来源,所以它也会发出状态。getSearchResults
用于select
上的Store
运算符。getSearchResults
收到状态并将其传递给撰写的getBookEntities
和getSearchBookIds
选择器。getBookEntities
收到状态并使用getBooksState
选择图书状态,并将其传递给fromBooks.getEntities
。getSearchBookIds
收到状态并使用getSearchState
选择图书状态,并将其传递给fromBooks.getEntities
。