在Redux中存储多维数据

时间:2017-09-19 06:57:58

标签: reactjs redux

首先,我仍然是React&的世界的新手。终极版。我正在阅读Normalizing State Shape,他们的例子是关于按ID存储数据。但是,如果我的数据被锁定在多个维度上呢?

例如,我的应用程序正在显示给定服务ID的成本数据,该服务ID是从API检索的。但是,用户可以选择时间范围。开始和结束时间戳传递给API,API返回该时间范围内的聚合数据。我希望能够将所有不同的时间段数据存储在Redux中,因此如果用户返回上一个时间段,那么该数据已经存在(我们的API很慢,因此已经加载了可用数据对用户体验至关重要)

因此,我不仅要按服务ID键入数据,还要按开始时间/结束时间键入数据。由于Redux推荐平面数据结构,我想知道我应该做多少平面?因为通常情况下,我会存储这样的数据:

{
  costData: {
    [service_id]: {
      [start_time]: {
        [end_time]: {
          /* data */
        }
      }
    }
  }
}

但这似乎是关于扁平化数据的想法。我的一个想法是根据服务ID& amp;生成ID。开始时间&表格的结束时间:

<ServiceID>::<StartTime>::<EndTime>

例如

00123::1505423419::1505785502

所以数据相当平坦:

{
  costData: {
    '00123::1505423419::1505785502': {
      /* data */
    }
  }
}

组件可以生成此ID并将其传递给fetchCostData()操作,该操作可以调度和获取数据并将该数据存储在该生成的ID上。但我不知道这是不是最好的方法。是否有关于如何处理此问题的指南或建议?

2 个答案:

答案 0 :(得分:2)

如果您不熟悉修改api,我建议您为此嵌套数据使用选择器(重新选择)。

- &GT;选择器是计算派生数据的最佳方法,允许Redux存储最小可能状态。

- &GT;选择器是有效的。除非其参数之一发生变化,否则不会重新计算选择器。

- &GT;选择器是可组合的。它们可以用作其他选择器的输入。

答案 1 :(得分:1)

除了其他答案之外,您可能还需要阅读文章Advanced Redux Entity Normalization,该文章介绍了跟踪规范化数据的其他查找说明的方法。我还在Redux Techniques#Selectors and NormalizationReact/Redux links list部分中有一些关于规范化的文章。