Angularjs 使用 redux

Angularjs with redux

我一直在阅读一些关于 Redux 的内容。我读到的大部分内容都是将 redux 与 react 结合起来。我使用 Angularjs。是否有充分的理由使用 Redux 与仅在 angularjs 范围内管理状态并允许 angular 管理绑定

Redux 在 Angular 1.x 上有好处,如果你有很多共享状态。在我工作的 Angular 应用程序中,我们有许多页面有一个共享模型和几个对该模型进行(重叠)更改的组件。保持数据同步或采用标准方式进行更改并不总是那么容易。 Redux 是一个很好的方法,尽管你当然可以只使用 Angular 服务来实现类似的东西。 Redux 使用的 one-way 数据流比您通常在 Angular 中使用的更容易(在我看来)。相反,引入 Redux 可能会损害您快速编写原型的能力,因为传递数据需要做更多的工作。这对我来说无关紧要,但对其他人来说可能很重要。

主要 principles of Redux 仍然适用于 Angular 个应用程序:

  • 单一事实来源(单一状态对象)。就像我上面说的,我认为在一个地方管理状态比在不同的 Angular 范围或服务中管理更容易。 Scope-soup 在某些应用程序中是一个真正的问题。
  • 状态是不可变的。这是与 Angular 的大部分摩擦出现的地方,因为 Angular(和 Javascript)使变异数据变得非常容易。但它确实可以帮助您编写更安全的代码。由于您只能通过创建副本来更改不可变对象,因此您可以更有信心在指令中进行的任何数据操作都不会破坏其他指令。相反,您可以预期其他指令不会对您的数据进行修改。所有这些修改都经过一个中心位置(单一状态对象,通过缩减器),因此更容易找到它们。
  • 更改是由纯函数进行的。我认为这在任何 JS 应用程序中都很有用。您拥有的没有大量副作用或框架依赖性的代码越多,您的应用程序就越容易理解和测试。我们对 Angular 代码的很多测试都有一堆应用程序设置样板。相比之下,测试减速器非常简单,因为它只是一个 Javascript 函数。

使用 Redux 意味着您的代码更少 Angular-centric。这意味着如果您决定不使用 Angular,您的升级路径会更简单。或者即使您只是想迁移到 Angular 2。但是很难说有多容易。

我不认为有很多重叠,因为 Angular 更像是一个框架而不是一个库,但是 Redux 中有些东西你无法在 [=34] 中充分利用=].您可能确切地知道您的应用程序状态的哪一部分正在发生变化,但是 Angular 正在进入 运行 它的摘要周期并检查所有内容。不过,Angular 2 在这方面更好。您将不得不跳过一些障碍才能使所有指令都与不可变数据一起使用。特别是如果您想通过 Redux 存储发送用户更改的每个字段,因为 ng-model 想要改变您传递给它的 属性。

每个应用程序都是不同的,但在我开发过的 Angular 种应用程序类型中使用 Redux 是有意义的。

Redux 可以与任何 javascript 技术一起使用。总之,你可以将它集成到一个 Agular 项目中。如今,它正在改变应用程序的构建方式。它通过使用单向数据流提供了一种构思应用程序的新方法。因此,这使您可以更好地控制应用程序状态和工具,以消除与数据可变性相关的问题。看看这个很棒的 tutorial about using Redux in Angular projects.