我有从商店(filterSelector)获取当前过滤器类型的选择器。
还有 3 个,它们使用不同的逻辑从存储中过滤实体,让我们假设它们的名称是 smallEntitiesSelector、mediumEntitiesSelector、bigEntitiesSelector。
创建选择器的最佳方法是什么,它将根据商店中的过滤器值返回过滤后的实体?
const filteredEntities = createSelector(
filterSelector,
(filterType) => {
switch filterType:
case "small": ???
case "medium": ???
case "big": ???
}
)
对于这个特定的示例,我将创建一个选择器,它接受过滤器参数,但在实际情况下,我在这个选择器中有更复杂的逻辑,我不想混合它们。
UPD:由于评论中的要求,我将添加更多代码。这是我如何使它工作的一种方法:
const filteredEntities = createSelector(
filterSelector,
smallEntitiesSelector,
mediumEntitiesSelector,
bigEntititiesSelector,
(filterType, smallEntities, mediumEntities, bigEntities) => {
switch filterType:
case "small": return smallEntities;
case "medium": return mediumEntities;
case "big": return bigEntities;
}
)
但我不喜欢这种解决方案,因为每次更改原始实体时都会执行所有 3 个选择器,而我只需要执行一个。所以 ti 有效,但我觉得有一种方法可以做得更好。