我在ngrx选择器内的两个数组之间分配参数时遇到问题。
问题1:如果我发出这样的两个动作:
startingtime
所以我的选择器工作正常:
this.store.dispatch(new GetArray);
this.store.dispatch(new GetAssociates);
但是我的情况是" array"数据已经预先加载并且选择器“getArray”已经预先加载了。已有数据,在这种情况下,我试图排除对api的不必要调用,仅调度/* array data */
export const getArray = createSelector(selectArrayFeature, (state: fromArray.State) => state.array);
/* associates data */
export const getAssociates = createSelector(selectAssociatesFeature, (state: fromAssociates.State) => state.associates);
/* mapped array */
export const getArrayWithAssociateName = createSelector(getArray, getAssociates, (array, associates) => {
return array.map(item => {
const obj = associates.find(val => val.id === item.eventTypeId);
item.name = obj ? obj.label : null;
return item
});
});
getArrayWithAssociateName`返回一个没有关联名称的数组。
问题2:关联是非常昂贵的调用,因此如果在选择器检查之后收到数据,它也会返回没有映射名称的数组。
那么有人可以帮我找到我做错的事吗?提前谢谢
答案 0 :(得分:0)
创建选择器hasAssociates
来检查何时使用getArrayWithAssociateName
。
export const hasAssociates = createSelector(
selectAssociatesFeature,
(state: fromAssociates.State) => !!state.associates.length
);
或验证选择器中的数组。
export const getArrayWithAssociateName = createSelector(
getArray,
getAssociates,
(array, associates) => {
if(!array.length || !associates.length) return [];
// return mapping
}
);