gpt4 book ai didi

ngrx - 为什么在这个@ngrx 示例中需要重新选择 createSelector?

转载 作者:行者123 更新时间:2023-12-04 16:50:57 27 4
gpt4 key购买 nike

下面的代码片段有什么作用?取自此 file .
export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);fromCollection.getLoading只有 truefalse值,因此可以通过使用 createSelector 实现任何优化吗? ?


export const getCollectionLoaded = createSelector(getCollectionState, fromCollection.getLoaded);

export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);

export const getCollectionBookIds = createSelector(getCollectionState, fromCollection.getIds);

最佳答案

根据示例应用程序的评论:

/**
* Every reducer module exports selector functions, however child reducers
* have no knowledge of the overall state tree. To make them useable, we
* need to make new selectors that wrap them.
**/

例如在 reducers/collections.ts 文件底部的选择器只引用集合切片:
export const getLoaded = (state: State) => state.loaded;
export const getLoading = (state: State) => state.loading;
export const getIds = (state: State) => state.ids;

这些集合选择器不能与 state.select() 一起使用,因为 state.select 期望与整个 AppState 一起使用。因此,在 reducers/index.ts 中,选择器被另一个选择器包裹,这样它就可以与整个 AppState 一起工作:
export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);

回到你的问题:为什么有必要为此使用 reselect 。在这种情况下重新选择不提供任何优化。所以 reselect 的主要目的是它提供了将选择器组合在一起的能力。

通过使用这个组合特性,我们可以让 collections.ts 只有集合切片的选择器。然后在 index.ts 中我们可以在 AppState 级别拥有选择器。此外,我们可以拥有跨商店不同切片工作的选择器,例如:
/**
* Some selector functions create joins across parts of state. This selector
* composes the search result IDs to return an array of books in the store.
*/
export const getSearchResults = createSelector(getBookEntities,
getSearchBookIds, (books, searchIds) => {
return searchIds.map(id => books[id]);
});

关于ngrx - 为什么在这个@ngrx 示例中需要重新选择 createSelector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com