漫谈REDUX

来源:互联网 发布:无法访问移动网络 华为 编辑:程序博客网 时间:2024/05/22 03:38

要想了解REDUX,还是需要先了解FLUX,建议看我的上篇文章《漫谈FLUX》。


首先说一下,REDUX和REACT并没有什么联系,不管用什么框架,都可以用REDUX作为一种状态管理器,它是JAVASCRIPT的状态容器,提供可预测的状态管理。

那什么是状态呢?状态其实可以理解成动态的数据,但凡会不断变化的数据,我认为都可以理解成状态。

当一个应用变得复杂时候,它的状态就很难管理,一个MODEL的变化可能会引起其他MODEL的变化,我们又很难追踪STATE什么时候比变的。于是REDUX应运而生来解决这个问题,让STATE的变化变得可以预测。

REDUX有三大定律

1.单一数据源

整个应用的STATE都存在一起,存在一个JS对象中,被称为STORE(和FLUX的STORE有点相似,都可以用来存数据)

2.STATE是只读的

这个FLUX一样,唯一能修改数据的地方就是在STORE,任何其他操作都不能修改STATE数据。像ACTION DISPATCH 和VIEW 都不负责改数据。

改变STATE的方法就是触发ACTION,ACTION是一个行为,可以理解为信息的载体,它也只是一个普通的JS对象罢了。

这样所有修改都可以集中处理,且严格按顺序执行。

3.使用纯函数执行修改

ACTION行为想要改变STATE的时候,需要描述它想怎么修改,这里用纯函数进行修改,好处就是纯函数就像一个状态机,输入一样的时候,输出总是一样的,我们输入原先的STATE和ACTION,输出新的STATE。注意REDUCER可以拆分成多个,分别操作STATE的不同部分。

——————————————————————

再来讲讲REDUX相较于FLUX不同的地方。

1.REDUX里的ACTION,它作为信息的载体,事实上只是一个对象,有一个TYPE属性,用来描述这个行为,是唯一的,还有一个DATA,就是ACTION要传递的信息。

FLUX里是ACTIONTYPE,REDUX里的ACTION CREATOR只是一个返回ACTION对象的函数,没有什么特别,之所以用函数包装起来是为异步应用。

FLUX里的ACTION CREATOR不返回什么,而是直接创建一个ACTION再把它DISPATCH出去。

在REDUX里面DISPATCH的工作是由STORE完成的。

2.FLUX的STORE可以有很多,而REDUX的STORE只有一个,存储这个程序所有的STATE。但好在在REDUX里我们可以用很多个REDUCER来处理这个唯一的STORE。