flux / react:如何处理商店中过滤的api-data

时间:2016-05-06 08:22:40

标签: javascript reactjs filtering flux reactjs-flux

我创建了一个使用通量模式并从API中提取数据的应用。 这是更新数据现在的工作原理:

  1. 组件调用get()操作
  2. 该操作从API中提取数据
  3. 操作将storechange事件调度到包含新数据的相关商店
  4. 商店使用从操作中收到的有效内容更新其状态并发出viewchange事件
  5. 组件侦听viewchange事件,从商店中提取新项目并重新呈现
  6. 到目前为止,此工作正常。但现在我想知道我将如何进行过滤。例如。对于特定组件(“通知”)我只想返回未读通知或给定时间段内的通知。 当我实施操作getByStatus(status) getByDate(start, end)时,整个商店将只包含未读通知或时间段中的通知,当您想要同时显示所有通知和未读通知时,这是一个问题时间。

    这是使用javascript / lodash或类似方法创建过滤方法的唯一方法吗?这会使服务器端的任何过滤都过时,并导致大量(不需要的)流量。 而创建像“UnreadNotificationStore”这样的独立商店将是非常难以处理的,并且在时间段的情况下问题仍然存在。 我能想到的唯一方法是在不更新商店的情况下添加getByStatus(status)操作,并将数据直接返回到组件。

1 个答案:

答案 0 :(得分:1)

您实际上是在谈论从内存客户端已有的有效负载中过滤项目,还是需要从服务器上为这些“过滤器”进行新的提取?

如果只是过滤客户端:

  1. 将所有提取的商品存储在商店的collection分支内。
  2. 发送您的过滤器选择并将其存储在filter变量中。
  3. 使用@cley建议的collection方法过滤您的.filter,并将过滤后的ID存储在filteredCollection变量中。
  4. 向您的商店添加一个获取器,例如getFilteredItems,它会将您过滤的ids返回到collection中的完整记录。
  5. 如果每次从服务器获取:

    1. 与上述相同,但将完整项目存储在filteredCollection中,而不仅仅是ID。 (除非你最终会在内存中结束大量数据,在这种情况下你可以考虑维护一个集合,你可以通过服务器的每次提取来扩充,然后从中进行过滤,但这会增加一些复杂性,我不会除非你确定你会有记忆问题,否则不建议。)
    2. 还有许多其他可能性,但这是一个合理的起点。