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

angular ngrx/store when and how to load data

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

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

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

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

{
  users: [],
  payments: []
}

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

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

如果所有现有数据都预加载到存储中,一切都很好,但是如果不可能(例如,如果使用分页),是否有任何替代方案?

是否有解决这些问题的标准方法?我在网上找到的所有示例要么没有分层实体,要么提前预加载所有数据。

通常您不希望在两个不同的地方拥有相同的数据,因此您会使用规范化版本并在不同的地方仅存储 ID。 您可以将状态想象成一个本地数据库,您不希望在多个地方拥有相同的数据。如果你想要一个 selectedUserPayments 的集合,你应该将它存储为一个 ID 列表。

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