Redux 基于先前选择的结果动态定义选择器

Redux 基于先前选择的结果动态定义选择器,redux,reselect,Redux,Reselect,我有一个选择器,它从StoreFilterSelector获取当前的过滤器类型。 还有3个,它们使用不同的逻辑从存储中过滤实体,让我们设想它们的名称是SmallEntitySelector、MediumEntitySelector、BigEntitySelector 创建选择器的最佳方法是什么,它将根据存储中的筛选值返回筛选的实体 const filteredEntities = createSelector( filterSelector, (filterType) =>

我有一个选择器,它从StoreFilterSelector获取当前的过滤器类型。 还有3个,它们使用不同的逻辑从存储中过滤实体,让我们设想它们的名称是SmallEntitySelector、MediumEntitySelector、BigEntitySelector

创建选择器的最佳方法是什么,它将根据存储中的筛选值返回筛选的实体

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是可行的,但我觉得有一种方法可以做得更好。

作为第一次尝试,您可以设置2个选择器来派生当前过滤器和当前实体数据。然后,将适当的选择器直接调用到

如果您遇到性能/缓存失效问题,可能会有所帮助

import createCachedSelector from 're-reselect';

const filteredEntities = createCachedSelector(
    filterSelector,
    entitiesSelector,   // Todo
    (filterType, entities) => {
        switch filterType: 
           case "small": return smallEntities(entities);
           case "medium": return mediumEntities(entities);
           case "big": return bigEntities(entities);
           // case default?
    }
)(
    filterSelector
);

预期的行为是什么?为什么您的解决方案不适用于您?预期的行为:我想根据filterType选择的结果获取一个选择器的结果。我的解决方案根本不起作用,它只是问题的一种说明。如果你用选择器函数代替问号SmallEntitySelector代替???对于第一种情况,您可以通过FilterIdentities selector获得此选择器,而我希望获得SmallEntities selector的结果。它看起来更像是一个与语言相关的问题,而不是与库本身相关的问题。请提供您的代码。我已经更新了文章中的详细信息和正在运行的代码示例。但是记忆功能是否可以使用小型/中型/大型实体选择器实现?在这种情况下,当filterSelector或EntitySelector结果与上一次调用不同时,缓存将无效。
import createCachedSelector from 're-reselect';

const filteredEntities = createCachedSelector(
    filterSelector,
    entitiesSelector,   // Todo
    (filterType, entities) => {
        switch filterType: 
           case "small": return smallEntities(entities);
           case "medium": return mediumEntities(entities);
           case "big": return bigEntities(entities);
           // case default?
    }
)(
    filterSelector
);