laizimo/zimo-article

Redux学习笔记(一)

laizimo opened this issue · 1 comments

前言

接触过react的人应该对redux并不陌生。但是,redux并不是react的伴生产物,即使你使用其他类库,也可以使用redux框架来管理状态,但是,有react如此好的选择,没人会考虑其他的技术选型。但是,多多少少还是会有人误解redux。

正文

redux框架在使用过程中有三个原则:

  1. 唯一的状态树(数据源)
    The first principle of Redux is whether your app is a really simple one like this counter example, or a complex application with a lot of UI, and change of state, you are going to represent the whole state of your application as a single JavaScript object.

    这是react作者的原话。译文则是:

    Redux的第一原则是无论你的应用是一个像计数器一样简单的应用,或者是有大量UI的复杂组件,但去改变状态时,你都应该将整个应用的状态表示成一个单一的JavaScript对象。

    这也是它与flux不同的地方,flux使得整个程序拥有多个store对象,而在多个store对象之间依赖时,需要使用waitFor去进行控制,redux轻松的解决了这一缺点。

  2. 状态树是只读的

    作为一个状态管理的框架,将状态放在状态树中进行严格控制,这样可以形成一个单向数据流,使得整个项目便于维护。

    那对于一个数据驱动的框架,如果不能改变state,那如何去进行变化呢。在redux中有着action这么一个概念。store对象通过dispatch来进行行为的分发,以此来修改每一次chang。

  3. 使用一个纯函数

    纯函数这个概念,或许你没听说过,或许你已经深入理解。不过没关系,我们先来了解一下他的反义词impure function。不纯函数,听起来怪别扭的,叫他普通函数吧。何为普通函数,来看一下,下面的例子:

    function square(x){
           updateDatabase(x);
           x = x*x
           return x;
    }

    这里的函数做了两件事情,一件更新数据库,以及返回参数的平方。为何说它不是纯函数呢,主要是因为函数在执行过程中执行了类似于更新数据库,或者调用其他函数的过程。真正的纯函数需要满足几个条件:

    1. 返回值仅依赖于传入参数的值(这句话可以理解为如果你在函数内部对参数使用其他函数进行处理,那么就表示你参入的参数并不只是依赖于参入的参数,还依赖于调用的函数)。
    2. 返回值为一个新的值,而非在原有参数上进行修改。
    function square(x){
         return x*x;
    }

    而在redux中,需要你去创建一个纯函数,称之为reducer。传入的参数为上一个状态和行为,返回值为下一个新状态。

总结

在使用redux的过程中,应该使用记住这三个原则,才能使得开发出来的程序,风格更加的严谨。