以下代码段的作用是什么?它取自file。
export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);
fromCollection.getLoading
只有true
或false
值,因此使用createSelector
可以实现任何优化吗?
在
export const getCollectionLoaded = createSelector(getCollectionState, fromCollection.getLoaded);
export const getCollectionLoading = createSelector(getCollectionState, fromCollection.getLoading);
export const getCollectionBookIds = createSelector(getCollectionState, fromCollection.getIds);
答案 0 :(得分:12)
根据示例应用程序的评论:
/**
* 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);
回到你的问题:为什么有必要使用重新选择。在这种情况下重新选择并不提供任何优化。所以重新选择的主要目的是它提供了将选择器组合在一起的能力。
通过使用此合成功能,我们可以使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]);
});
答案 1 :(得分:1)
是的,可能会有性能提升。如果 $(document).ready(function() {
$("a:regex(id,add-item-[0-9]+)").click(function(event) {
event.preventDefault();
var link = $(this).attr("href");
$.ajax({
url: link,
method: "GET",
dataType: "json",
success: function(data) {
$('#notice-modal').modal('show');
if(data.quantity) {
$("#cart-item-count").css('display', 'block');
$("#cart-item-count").html(data.quantity);
} else {
$("#cart-item-count").hide()
}
}
});
})
});
计算成本很高,重新选择将避免无用的重新计算,直到fromCollection.getLoading
保持返回相同的值。