NgRx是一套用于响应式扩展和状态管理的Angular库。通过简化对象中的应用程序状态并强制执行单向数据流,它使Angular开发中的状态管理更加容易。一个完整的状态管理系统应该使开发人员能够对状态进行建模——例如,创建状态的简单表示、更新其值、在值更改时监视状态以及检索状态值。许多Ngrx初学者经常混淆Store和State的概念。我们可以把Store看作是State的集合或抽象。应用程序状态驻留在商店中。商店就像ngrx/store模块中的状态容器。此外,Angular组件将Store注入到它们的构造函数中以建立通信渠道。Store公开了Angular组件使用的两个方法。通过注入Store,组件可以访问以下功能:select:Store使用此方法从Store中包含的状态(实际上只是一个普通的JavaScript对象)返回一段状态数据。select方法返回Store对象本身,它是一个Observable,因此组件可以挂接到select()方法以在Store组合新状态对象时监视状态变化。这是SAPeCommerceCloudSpartacusUI中的常见实现。在Service类的构造函数中注入Store:然后调用store.select,传入一个selector,返回一个Observable对象:select方法中传入一个selector:这个selector接受两个类型参数,一个是featurestate,一个是另一个是Application的状态切片。dispatch:Store使用这个方法让组件向Store发送操作。带有选项的操作可以包含有效负载。Store处理通过reducer分派的操作。下面也是SAP电商云SpartacusUI的例子:userId,orgCustomerId,})),()=>{//TODO:对于未来的版本,重构这部分以抛出错误});总而言之,一个组件在Store上调度一个操作。Store通过执行reducer来响应动作,并最终组成一个新的状态对象。之后,Store将有一个新的状态,并通知订阅者(组件)新的更新。
