我创建了一个使用流量模式并从API提取数据的应用程序。
现在正在更新数据的工作方式:

  • 组件调用get()操作
  • 该操作从API提取数据
  • 该操作将storechange事件调度到包含新数据
  • 的相关商店
  • 存储区使用从操作接收到的有效负载更新其状态,并发出viewchange事件
  • 组件侦听viewchange事件,从商店中提取新商品并重新提供

  • 到目前为止,一切正常。但是现在我想知道如何进行过滤。例如。对于特定的组件(“通知”),我只想返回未读的通知,或者在给定时间段内的通知。
    当我实现一个 Action getByStatus(status) getByDate(start, end)时,整个商店将只包含未读通知或该时间段内的通知,当您要同时显示所有通知和未读通知时,这是一个问题。

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

    最佳答案

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

    如果仅过滤客户端:

  • 将所有获取的项目存储在商店的collection分支之类的位置。
  • 分派(dispatch)您的过滤器选择,并将其存储在filter变量中。
  • 使用@cley建议的类似collection方法来过滤.filter,并将过滤后的ID存储在filteredCollection变量中。
  • 将 setter/getter 添加到您的商店中,例如getFilteredItems,它返回映射到collection中完整记录的已过滤ID。

  • 如果每次都从服务器获取:
  • 与上面相同,但将全部项目存储在filteredCollection中,而不仅仅是ID。 (除非最终要在内存中存储大量数据,否则在这种情况下,您可以考虑维护一个集合,每次从服务器提取内容并对其进行过滤后都会进行扩充,但这会增加很多复杂性,而我不会除非您确定会遇到内存问题,否则不建议。)

  • 还有许多其他可能性,但这是一个合理的起点。

    08-25 06:34
    查看更多