我一直在阅读一些关于 Redux 的内容。我读到的大部分内容都是将 redux 与 react 结合起来。我使用 Angularjs。是否有充分的理由使用 Redux 与仅在 angularjs 范围内管理状态并允许 angular 管理绑定(bind)
最佳答案
如果你有很多共享状态,Redux 可以从 Angular 1.x 中获益。在我工作的 Angular 应用程序中,我们有许多页面具有共享模型和几个对该模型进行(重叠)更改的组件。保持数据同步或采用标准方式进行更改并不总是那么容易。 Redux 是一个很好的方法,尽管你当然可以只使用 Angular 服务来实现类似的东西。 Redux 使用的单向数据流比您通常在 Angular 中做的更容易(在我看来)。相反,引入 Redux 可能会损害您快速编写原型(prototype)的能力,因为传递数据需要做更多的工作。这对我来说无关紧要,但对其他人来说可能很重要。
主要principles of Redux仍然适用于 Angular 应用程序:
- 单一事实来源(单一状态对象)。就像我上面说的,我认为在一个地方管理状态比在不同的 Angular 范围或服务中管理状态更容易。 Scope-soup 在某些应用程序中是一个真正的问题。
- 状态是不可变的。这是与 Angular 的大部分摩擦所在,因为 Angular(和 Javascript)使改变数据变得非常容易。但它确实可以帮助您编写更安全的代码。由于您只能通过创建副本来更改不可变对象(immutable对象),因此您可以更有信心在指令中进行的任何数据操作都不会破坏其他指令。相反,您可以预期其他指令不会对您的数据进行修改。所有这些修改都经过一个中心位置(单一状态对象,通过缩减器),因此更容易找到它们。
- 更改由纯函数完成。我认为这在任何 JS 应用程序中都很有用。您拥有的没有大量副作用或框架依赖性的代码越多,您的应用程序就越容易理解和测试。我们对 Angular 代码的很多测试都有一堆应用程序设置样板。相比之下,测试 reducer 非常简单,因为它只是一个 Javascript 函数。
使用 Redux 意味着更少的代码以 Angular 为中心。这意味着如果您决定不使用 Angular,您的升级路径会更简单。或者即使您只是想迁移到 Angular 2。不过很难说有多容易。
我不认为有很多重叠,因为 Angular 更像是一个框架而不是一个库,但在 Redux 中有些东西你无法在 Angular 中充分利用。你可能确切地知道你的应用程序状态的哪一部分正在发生变化,但 Angular 正在运行它的摘要循环并检查所有内容。不过,Angular 2 在这方面更好。您将不得不跳过一些障碍才能使所有指令都与不可变数据一起使用。特别是如果你想通过 Redux 存储发送用户更改的每个字段,因为 ng-model 想要改变你传递给它的属性。
每个应用程序都是不同的,但在我开发过的 Angular 应用程序类型中使用 Redux 是有意义的。
关于javascript - 带有 redux 的 Angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903470/