参考链接:https://www.ibm.com/developerworks/cn/web/wa-manage-state-with-redux-p1-david-geary/
应用程序状态通常很复杂,Redux Javascript库是一个可以减少状态维护过程中的错误针对Javascript应用程序的可预测状态容器。
Redux来自React社区,是Facebook的Flux架构的一种简化实现,但是它并不依赖React,也就是除了React还可以用于其他框架。
Redux来源于Reducer + flux。Flux本质上采用了MVC结构,引入了很高的复杂性,但Redux借用了Elm[一个基于不可变数据结构和纯函数的强大反应式函数编程语言。]的缩减程序Reducer的概念降低了Flux的复杂性。纯函数是没有副作用的函数,Redux缩减程序是计算应用程序状态的纯函数。
Redux的3条原则:
- 应用程序状态存储在单个对象中。
- 应用程序状态不可变,只能通过描述状态更改的操作彻底替换。
- 缩减程序根据当前状态和某个操作来创建下一个状态。
-
应用程序状态存储在单个对象中
Redux通过一个Javascript对象管理状态,这个对象称为数据存储,包含了应用程序的所有状态。
优点:- 状态集保存在一个对象中,使得在阅读代码时推断应用程序数据变的更容易。
- 所有数据在一个位置,更容易调试和测试应用程序。
- 应用程序状态存储在一个对象中,更容易持久保存应用程序的整体状态。
应用程序状态不可变
使用Redux,修改应用程序状态是不被允许的,只能在需要时,通过操作[不可变的Javascript对象,用于描述状态更改]使用新状态替换现有状态。
尽管封装状态更改时使用了模式,但封装状态更改远不止使用模式那么简单,所以最好连同引用一起删除。
优点:能够实现无限撤销和重做[类似于时光机]。操作也是按照严格的顺序执行,所以不会发生竞争条件。
- 缩减程序创建一种新状态
缩减程序是纯Javascript函数:- 根据当前状态和某个操作创建一个新状态
- 集中数据变化
- 可处理所有或部分状态
- 可组合和重用
Redux的可预测状态容器:给定任何状态和任何操作,可以肯定的预测应用程序的下一个状态,使无限撤销/重做和实时编辑得以实现。
Redux三部分:操作[action]、缩减程序[reducer]和存储[store]
每个Redux应用程序仅有一个存储,每个存储仅有一个缩减程序。