Angularjs与redux

Dav*_*ion 7 javascript angularjs angularjs-scope redux

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

Jef*_*ffB 19

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

Redux的主要原则仍然适用于Angular应用程序:

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

使用Redux意味着更少的代码是以角度为中心的.这意味着如果您决定不使用Angular,则可以更轻松地升级路径.或者即使您只是想迁移到Angular 2.但是,更难以说是多么容易.

我不认为有很多重叠,因为Angular更像是一个框架而不是一个库,但是在Redux中有些东西你不能在Angular中获得更多的优势.您可能确切地知道应用程序状态的哪个部分正在发生变化,但Angular将继续运行其摘要周期并检查所有内容.不过,Angular 2在这方面更好.您将不得不跳过一些箍,使所有指令都使用不可变数据.特别是如果你想发送每个字段,用户通过Redux商店进行更改,因为ng-model想要改变你传递它的属性.

每个应用程序都不同,但使用Redux在我所使用的Angular应用程序类型中是有意义的.