angular 中的状态管理是什么?我为什么要使用它?
What is state management in angular? and why should I use it?
我是 Angular 的新手,这个问题可能非常宽泛。但我有兴趣了解更多有关状态管理用法的信息。最近我们的一个项目使用 NGXS 库实现了状态管理。但是我想了解它给应用带来的所有优势是什么?
实现非常深入和高层次,有一些操作携带应用程序数据(由用户设置)和监听那些处理请求并根据需要分派到下一步的操作。这在应用程序使用或性能等方面与一般 angular 应用程序有何不同。我正处于理解状态管理的开始阶段,所以我觉得我正在编写很多可能不是真正需要的代码。示例 - 只是为了路由到另一个页面,我必须实现一个状态模式来保存对象并声明一个动作和一个侦听器来实现该动作。
我正在查看几个文档并获取有关如何实施状态管理的详细信息,但没有得到为什么应该实施状态管理的正确答案。
提前致谢!
首先,要回答你的问题,你应该知道状态管理不是Angular的一个术语,你不必使用它。状态管理是一个术语,它定义了一种我们可以存储数据、修改数据并对数据的变化做出反应的方式。在我们的例子中,NGRX 和 NGXS 库使用了一种称为 CQRS (Command Query Responsibility Segregation) 原则的模式,我引用维基百科:
It states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both.
状态管理充当您应用程序的单一事实来源。
您可以在没有复杂状态管理的情况下构建应用程序。您只能使用服务,一切顺利。将状态管理库(例如 NGRX/NGXS)添加到您的应用程序会增加一些复杂性和样板文件,但是您将获得以下好处(引自 ):
- Large team - You can split development tasks between people easily if you have chosen CQRS architecture. Your top people can work on domain logic leaving regular stuff to less skilled developers.
2. Difficult business logic - CQRS forces you to avoid mixing domain logic and infrastructural operations.
3. Scalability matters - With CQRS you can achieve great read and write performance, command handling can be scaled out on multiple nodes and as queries are read-only operations they can be optimized to do fast read operations.
最受欢迎的 Angular 状态管理库是 NGRX and NGXS。
我不会详细介绍 NGRX,但简而言之 - 它已在实际生产应用中得到证明。
然而,NGXS 是 angular 的一个较年轻的状态管理库,它采用了 NGRX 的一些思想,并通过使用 Angular 提供的工具(例如 DI)“赋予”它权力。 NGRX 和 NGXS 之间的主要区别是您的样板文件在 NGXS 上要少得多。有兴趣的可以看看主要原因Why another state management for Angular.
总结一下 - 如果您计划构建大型应用程序,那么您应该考虑使用状态管理,尽管 - 您不必这样做。
免责声明:我是图书馆的作者
Angular 中的简单状态管理仅包含服务和 RxJS。
- 参见stackblitz demo。
- 参见source code。
您可以尽可能简单地在组件之间共享状态,并利用组件状态和 Angular 的依赖注入系统的优点。
我是 Angular 的新手,这个问题可能非常宽泛。但我有兴趣了解更多有关状态管理用法的信息。最近我们的一个项目使用 NGXS 库实现了状态管理。但是我想了解它给应用带来的所有优势是什么?
实现非常深入和高层次,有一些操作携带应用程序数据(由用户设置)和监听那些处理请求并根据需要分派到下一步的操作。这在应用程序使用或性能等方面与一般 angular 应用程序有何不同。我正处于理解状态管理的开始阶段,所以我觉得我正在编写很多可能不是真正需要的代码。示例 - 只是为了路由到另一个页面,我必须实现一个状态模式来保存对象并声明一个动作和一个侦听器来实现该动作。
我正在查看几个文档并获取有关如何实施状态管理的详细信息,但没有得到为什么应该实施状态管理的正确答案。
提前致谢!
首先,要回答你的问题,你应该知道状态管理不是Angular的一个术语,你不必使用它。状态管理是一个术语,它定义了一种我们可以存储数据、修改数据并对数据的变化做出反应的方式。在我们的例子中,NGRX 和 NGXS 库使用了一种称为 CQRS (Command Query Responsibility Segregation) 原则的模式,我引用维基百科:
It states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both.
状态管理充当您应用程序的单一事实来源。
您可以在没有复杂状态管理的情况下构建应用程序。您只能使用服务,一切顺利。将状态管理库(例如 NGRX/NGXS)添加到您的应用程序会增加一些复杂性和样板文件,但是您将获得以下好处(引自 ):
- Large team - You can split development tasks between people easily if you have chosen CQRS architecture. Your top people can work on domain logic leaving regular stuff to less skilled developers. 2. Difficult business logic - CQRS forces you to avoid mixing domain logic and infrastructural operations. 3. Scalability matters - With CQRS you can achieve great read and write performance, command handling can be scaled out on multiple nodes and as queries are read-only operations they can be optimized to do fast read operations.
最受欢迎的 Angular 状态管理库是 NGRX and NGXS。
我不会详细介绍 NGRX,但简而言之 - 它已在实际生产应用中得到证明。
然而,NGXS 是 angular 的一个较年轻的状态管理库,它采用了 NGRX 的一些思想,并通过使用 Angular 提供的工具(例如 DI)“赋予”它权力。 NGRX 和 NGXS 之间的主要区别是您的样板文件在 NGXS 上要少得多。有兴趣的可以看看主要原因Why another state management for Angular.
总结一下 - 如果您计划构建大型应用程序,那么您应该考虑使用状态管理,尽管 - 您不必这样做。
免责声明:我是图书馆的作者
Angular 中的简单状态管理仅包含服务和 RxJS。
- 参见stackblitz demo。
- 参见source code。
您可以尽可能简单地在组件之间共享状态,并利用组件状态和 Angular 的依赖注入系统的优点。