Angular NgRx父选择器静态参数
假设我有一个选择器,它接收道具:Angular NgRx父选择器静态参数,angular,ngrx,Angular,Ngrx,假设我有一个选择器,它接收道具: export const selectTaskById = createSelector( selectCoreState, (state, props: { id: TaskKey }) => state?.tasks[props.id] || null ); 然后我有另一个选择器,它不接收道具,但它需要使用来自上述选择器的数据,通过提供硬编码id: export const selectGeneralTask = createSelector
export const selectTaskById = createSelector(
selectCoreState,
(state, props: { id: TaskKey }) => state?.tasks[props.id] || null
);
然后我有另一个选择器,它不接收道具,但它需要使用来自上述选择器的数据,通过提供硬编码id:
export const selectGeneralTask = createSelector(
selectTaskById, // -- Here I want to pass hardcoded props with {id: 'generalTask'}
(state) => state
);
我搜索了SO和互联网,但没有找到一个解决方案,我如何才能做到这一点
总之,我想找到一种方法,如何在选择器上进行某种“抽象”,而不需要在我需要特定任务信息的每个地方都知道“id”
更新就目前而言,我找到的唯一解决方案如下:
我又添加了一个选择器:
export const selectRootState = (state: AppState) => state;
export const selectTaskById = (id) => createSelector(
selectCoreState,
(state) => state?.tasks[id] || null
);
export const selectGeneralTask = createSelector(
selectTaskById('generalTask'),
(state) => state
);
然后,在选择GeneralTask
中使用它:
export const selectGeneralTask = createSelector(
selectRootState,
(state) => selectTaskById(state, {id: 'generalTask'})
);
如果有人有其他方法来解决这个问题,我会很高兴听到它。您可以创建一个工厂选择器:
export const selectRootState = (state: AppState) => state;
export const selectTaskById = (id) => createSelector(
selectCoreState,
(state) => state?.tasks[id] || null
);
export const selectGeneralTask = createSelector(
selectTaskById('generalTask'),
(state) => state
);
嗯…当我试着选择工厂时,它不起作用。现在,当你举一个例子时,我很清楚我错过了什么:)谢谢!我换了工厂。