-1

我从事过一些 Angular 2+ 项目,但我仍然想知道为什么我们需要 NgRX。我可以用服务来实现一切,而且它们似乎更容易理解。我不确定这是否是因为我不熟悉 NgRX,但无论如何我找不到 NgRX 的特定用例。谁能给我一些关于以下内容的解释?

  • NgRx 和服务实现状态的区别
  • 每种实施方式的优缺点
  • 在实现 NgRX 时我们需要考虑什么?
  • 对性能有任何担忧吗?
4

1 回答 1

3

这将是一个相当ngrx专业的帖子,因为我已经使用它近 3 年了。我已经看到很多次它脱离了状态并且管理ngrx状态变得很痛苦,但主要是由于无视应用程序架构和最佳实践。如果应用得当,编写和审查ngrx代码是一种乐趣,因为事物具有严格的结构。

恕我直言:它可以在任何应用程序中使用,在更大的应用程序中确实有意义。可以为您做的所有ngrx事情也可以使用服务来构建,但从长远来看,这将变得越来越难。当你意识到你需要它时,为时已晚。

这是一篇讨论这一切的文章。

https://blog.strongbrew.io/do-we-really-need-redux/

NgRx 和服务实现状态的区别

虽然ngrx对于如何读取/更新/写入数据非常有意见,但服务更多地取决于开发人员。我倾向于选择 CRUD 操作来保持一致性。

  • Angular 服务通常会公开Observables哪些保存数据和函数来更新上述Observables. 这通常意味着我们最终会在每个服务中重新创建 CRUD 操作。
  • ngrx将数据公开为selectors并将更新/删除函数公开为actions. 最重要的是effects要处理异步操作。读和写之间有明显的区别,因为逻辑发生在不同的地方,而不是服务类,后者主要是多合一的。
  • Angular 服务使得在某些通常不鼓励的类中构建私有状态管理变得非常容易。

每种实施方式的优缺点

有一些ngrx有价值的东西,例如它的扩展,但它们需要正确使用和配置。对我来说,主要价值是它提供的一致性。

  • devtools 可以更容易地了解哪些值在何时以及多久更新一次。使用控制台日志对此进行调试很痛苦:
  • 有一个@ngrx/entity-package 可以更轻松地管理集合,因为它提供了诸如upsertOneupdateMany具有明确定义的类型的方法。它还通过生成选择器提供了方便的访问:
  • @ngrx/data@ngrx/entity包的扩展,通过提供 API 方法来更新/删除...实体,从而无需编写大量服务
  • 您始终可以@ngrx/effects使用自己的服务进行扩展。

对性能有任何担忧吗?

@ngrx如果忽略最佳实践,性能可能会受到影响:=

在实现 NgRX 时我们需要考虑什么?

尽快为您提供最佳实践。

于 2020-09-16T11:39:29.427 回答