angular ngrx / store何时以及如何加载数据

时间:2017-08-07 16:11:38

标签: angular ngrx

我对整个redux模式都很陌生。我不确定从服务器加载数据并将其添加到商店的最佳方法。

想象一下数据的双层层次结构:

  • 用户
    • 付款

每个用户都可以进行零对多付款。

根据我在网上收集的信息,最好在客户端存储规范化数据,但为了简单起见,让我们使用这个例子中的对象数组:

{
  users: [],
  payments: []
}

现在,如果我想显示一个用户的所有付款,我可以浏览商店中的所有付款并过滤掉具有预定义userId的付款。

或者,如果数据已完全规范化,则每个用户对象都会有一个名为payments的数组,其中包含属于该用户的付款的ID,并且可以通过这种方式提取它们。

如果所有现有数据都在商店中预先加载,那么一切正常,但是如果不可能(例如,如果使用了分页),还有其他选择吗?

  • 我是否只加载特定用户的付款并将其存入付款阵列?当我想显示另一个用户的数据时怎么办?我是否只是将这些添加到 payments 数组中,还是重置数组?
  • 我是否将新数组添加到名为 selectedUserPayments 的商店并预先填充该数组?如果是这种情况,我可能会在 payment 数组中同时付款(例如显示系统中所有付款的列表)和 selectedUserPayments array,我必须同步它们。

是否有解决这些问题的标准方法?我在网上找到的所有例子都没有分层实体或预先加载所有数据。

1 个答案:

答案 0 :(得分:2)

通常,您不希望在两个不同的位置拥有相同的数据,因此您将使用标准化版本并仅在不同位置存储ID。 您可以将状态视为本地数据库,您不希望在多个位置拥有相同的数据。如果您想拥有selectedUserPayments的集合,则应将其存储为ID列表。

如何为特定用户加载数据取决于您要使用的缓存策略。如果付款信息在服务器上经常发生变化,您可能希望每次都重新加载,并在每次选择用户时重新初始化付款数组。如果不经常更改,更实际的方法是检查选择用户的时间(如果有),如果没有,请从服务器读取它们并将其添加到状态。通过这种方式,访问之前选定的用户可以保存请求,因为您不需要再次获取付款。