首先,我仍然是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上。但我不知道这是不是最好的方法。是否有关于如何处理此问题的指南或建议?
答案 0 :(得分:2)
如果您不熟悉修改api,我建议您为此嵌套数据使用选择器(重新选择)。
- &GT;选择器是计算派生数据的最佳方法,允许Redux存储最小可能状态。
- &GT;选择器是有效的。除非其参数之一发生变化,否则不会重新计算选择器。
- &GT;选择器是可组合的。它们可以用作其他选择器的输入。
答案 1 :(得分:1)
除了其他答案之外,您可能还需要阅读文章Advanced Redux Entity Normalization,该文章介绍了跟踪规范化数据的其他查找说明的方法。我还在Redux Techniques#Selectors and Normalization的React/Redux links list部分中有一些关于规范化的文章。