使用工厂选择器模式const selectA = (id: number) => createSelector(...)
,我有一个实例,我想在另一个选择器(遍历 ID 数组)中重用此选择器,但我不知道在调用createSelector
.
所以我有一个选择器,每当我想获得组件 A 的一部分状态时,我都会使用它。
const selectA = (id: number) =>
createSelector(
selector1.selectEntityMap,
selector2.selectEntityMap,
selector3ById(id),
(
thing1,
thing2,
thing3
) => {
return ...
});
现在我想为数组中的每个项目获取组件 A 的列表。
const selectListOfA = (ids: number[]) =>
createSelector(
selectA,
(selectorA) => {
return ids.map((id) => selectorA(id));
});
问题是selectA
,它现在是一个工厂选择器,需要一个参数,但调用时我不知道它createSelector
。
我可以通过在工厂中创建另一个工厂来编译代码
const selectAFactory = () => selectA;
然后引用新工厂中的createSelector
const selectListOfA = (ids: number[]) =>
createSelector(
selectAFactory, <<< here
(selectorA) => {
return ids.map((id) => selectorA(id));
});
但是,当然,现在发生的是选择器正在返回一个MemoizedSelector[]
.
这种模式似乎不应该这么复杂,人们不是以这种方式重用他们的选择器吗,我错过了什么?