我正在构建一个辅助项目,目前正在使用React开发前端。我有一个关于分页API响应和Redux的问题(这是我第一次使用Redux(。
假设我有一个/invoices
API端点,它提供了发票的分页列表。我还可以将查询参数附加到端点,例如?is_paid=false
,以过滤这些发票。我应该有一个发票商店和另一个筛选发票商店吗?
我的想法是,对于未经过滤的发票,我只会获得第一页并将其添加到商店,而如果用户想要第二页,我也会将其附加到商店等。因此,如果用户想要返回,则不会提出任何请求。然而,我不确定是否也应该对筛选后的发票进行同样的操作,因为可以进行多种筛选。
您的术语有点偏离。您肯定只想要一个存储实例。但你的商店里可以有很多不同的房产。
您的商店应该包含一个属性,该属性是由唯一发票id键入的所有已加载发票的字典。即使该发票可能出现在许多不同的筛选列表中,您也只需要每个发票有一条记录。这些是你的";实体";。
您还需要知道每个列表中有哪些发票,因此您的商店中应该有另一个包含该数据的属性。这些是你的";集合";。你只需要在这里存储发票的ID。您将从实体属性中获得完整的发票。
通常,我用于集合的关键字是URL的路径。所以你的商店结构看起来像:
{
invoices: {
entities: {
1: {/* complete invoice record */},
2: {/* complete invoice record */},
...
},
collections: {
"/": [99, 98, 97,...],
"/page/2/": [89, 88, 87,...],
"/?is_paid=false": [99, 92, 87, ...],
"/?is_paid=false&someFilter=x": [92, 35, 21, ...],
}
}