2017-10-04 51 views

回答

1

当你说ngrx时,你是否在说ngrx商店?

如果是这样,这是Redux专门用于Angular的实现。可能值得通过Redux introduction来了解它的全部内容。

一般来说,它是一种控制应用程序状态和整个应用程序中数据流的模式。

以一个角度分量为例。组件MyComponent加载一些数据“产品”。现在,无论何时,如果这个数据(状态)存储在MyComponent中,它就会丢失。所以,无论何时创建组件,我们都会重新加载它。效率不高,对我们不耐烦的用户不好。

也许MyOtherComponent也获得产品!它拥有它的产品清单。但用户可以在这里编辑product.name。状态已被修改MyOtherComponent,而不知道MyComponent - 所以它仍然显示旧名称。我们可以让每个人都拥有对另一个人的引用,或者让父母获得数据 - 但这是我们大型网络中所有组件的开始。如果我们想要改变任何事情,这不是一个好消息。

解决方案是注入一个服务,MyProductsService处理要做的事情(让我们称之为动作?),如loadData(),并将该状态存储在中央位置。

现在,当有人需要它时,他们会询问MyProductsService,并加载它并提供数据。当有人修改它时,他们必须回到MyProductsService,然后就可以......啊。请看,MyProductService如何告诉它的依赖关系某人改变了状态? MyProductsService.products已更新,但它需要将该更改“推”到MyComponentMyOtherComponent

这里是NgRx(RxJS为Angular设计)的用处。它使用Observable Pattern来管理“推送”数据。当有人想要products时,它作为Observable提供,并且MyComponents订阅更新。当它发生变化时,products观测值会发出新的值,每个人都很高兴。

现在,毕竟这已经结束了,你最终会创建一些看起来有点像Redux的东西,但它是自定义的 - 可能有错误,未经测试,并且你花费了数小时的时间。

因此,您可以随时使用已经由真正聪明的人编写的版本,并通过有用的教程进行彻底测试。它很好地遵循了最佳实践。与之互动的方式(变异状态)非常严格,因此可以防止不必要的副作用。数据以可预测,可测试和可重复的方式从顶端向下流动。

+1

_“这里输入RxJs(或NgRx for Angular)。”_。这听起来像ngrx是rxjs的角度版本,而不是。 – Skeptor

+0

你说得对。我在想“这里是你需要RxJS的地方 - 或者如果你使用的是角度,NgRx”,但我的措辞很糟糕。编辑。 – Joe

+0

非常好的解释。做得好! –

相关问题