我可以使用减速器中的选择器吗?
我有一个类似的代码:
case Action Types.ACTION: {
const loading = getIsLoading(state)
return {
atribute1: false,
attribute2: action.payload,
}
}
default: {
return state;
}
}
}
export const getState = createFeatureSelector<State>('feature');
export const getIsLoading = createSelector(
getState,
state => state.loading
);
当我首先发出一个动作时,我得到一个错误:“无法读取未定义的'加载'。
我的错误在哪里?我的方法出了什么问题?
答案 0 :(得分:0)
就像我在评论中所述:最好不要在州内复制信息。如果您需要在减速机中调用选择器,它看起来像您和#39;我会这样做。
您可以通过创建第三个更高阶的减速器来避免这样做,该减速器将返回现有的减速器。
所以你有getIsBusy reducer并且你创建另一个只会从你的状态返回新数据的那个,你要读的那个是isBusy:
export const getAttribute = createSelector(
getState,
state => state.attribute
);
现在你有getIsBusy和getAttribute作为选择器,你可以创建第三个,你可以放置你需要的任何逻辑:
export const getHigherOrderSelector = createSelector(
getIsBusy,
getAttribute,
(isBusy, data) => {
return { isBusy, data };
// Or whatever other processing you might want to do here
}
);