angular6 - 用于列表和详细数据对象的 NgRx 存储

标签 angular6 ngrx ngrx-store ngrx-effects angular7

我对 NgRx 非常陌生,正在尝试了解它。我知道目标是拥有一个存储不同类型状态的数据存储。我正在尝试了解如何使用数据列表。

场景 1: 用户首先导航到列表,在这种情况下会触发效果以从后端/API 检索列表。成功后,列表将保存到存储中,并且 UI 组件通过 | 响应可观察的内容。 async 并呈现列表。用户单击某个项目即可查看详细信息。我们可以将所选项目的 Id 存储在商店中,然后简单地使用过滤机制从商店中的列表数组中检索详细数据。或者,我们可以对服务器进行另一个效果调用以获取详细的有效负载。我假设这里的决策点是列表是否包含详细信息页面所需的所有数据?

场景 2:假设商店中的列表包含详细信息页面所需的所有数据,并且用户单击列表中的某个项目只需将所选项目的 ID 保存到商店,然后导航到详细信息页面,其中详细数据只是根据商店中选定的商品 ID 从列表中过滤出来,当用户刷新详细信息页面上的浏览器 URL 时会发生什么?发生这种情况时,列表不再在商店中,所选项目的 ID 也不再存在。但是,所选项目的 id 位于 URL 和路由中。您如何处理这种情况?您是否重建列表以检索详细记录?

场景 3:处理整个列表中具有不同数据子集的场景的最佳方法是什么。也许您需要查看“待处理”的项目列表以及本周已创建的另一个项目列表等。将所有记录下载到商店作为主列表,然后简单地过滤掉所需的记录似乎非常低效对于不同的看法。我读过一些教程,其中您在商店中拥有主列表,然后只需在商店的另一部分中拥有组成不同切片的 ID。这看起来非常繁重,并且将数据库复制到客户端上。在商店内过滤列表的最佳方法是什么?

感谢您的帮助和见解。

最佳答案

场景 1:你说对了!

场景 2:视情况而定。

  • 例如,您可以将数据存储在 localStorage
  • 必须通过后端 API 获取列表

场景 3:保持状态标准化是这里的关键(您将使用 ID)。此外,我们不必一次加载所有实体,这可以部分完成。 The redux docs有一个您可以阅读的性能部分。

关于angular6 - 用于列表和详细数据对象的 NgRx 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023804/

相关文章:

angular - 隐藏特定路线上的标题 - Angular 6

Angular/w ngrx - 连续 API 调用

Angular ngrx - 显示加载 gif

angular - NgRx - 状态如何组合和初始化

javascript - 错误后可观察到 rx 损坏

typescript - 当前没有初始化 firebase.app.App 实例。 Angular 6 登录时出现电话错误

javascript - 如何将 jquery 代码更改为 javascript 或 typescript

angular - NgRx - 如何分割状态

angular - 如何确定我已取消订阅?

angular - 路由器存储无法识别路由器参数