redux中的三个原则与先前技术

                                                                        redux中的三个原则与先前技术

1.数据来源的唯一性

          在redux中所有的数据都是存放在你的store中,这样做的目的就是保证数据来源的唯一性。那么为什么要这样做呢?使得创建通用应用程序变得很容易,因为服务器的状态可以序列化并水合到客户机中,而不需要额外的编码工作。单个状态树也使调试或检查应用程序变得更容易;它还使您能够在开发中持久保存应用程序的状态,以获得更快的开发周期。

2.state只能是只读的状态

        state只能是只读的,在你的action中不能你可以去取它的值,但是不能够去改变它,这个时候采取的方式通常是深度拷贝state,并且将其返回给一个变量,然后改变这个变量,最后将值返回出去。而且要去改变数据你只能够在的reducer中,reducer是一个描述了对象发生了一个什么样过程的函数过程。  只读状态的好处,确保视图和网络回调都不会直接写入状态。

3.使用纯函数进行改变

         reducer的实质其实就是一个纯函数,那么什么是纯函数呢?函数中参数的调用的是什么,返回的就是什么。在action中其接受两个参数,第一个是state,第二个参数就是action ,其表述的方式是下面这种形式,state中通常默认的是一个对象,但是也可以是其他的值。

先前技术

redux是一个混合的遗产,其与某些模式与技术相同,但是又有所不同,下面就来进行说明。

1.Flux

  其与redux相同的地方在于,它们都强调其更新状态的逻辑在同一个层中,reducer在redux  stores在Flux中。另外它们改变数据的逻辑都是放在action当中;其不同之处在于redux没有Dispatcher这个概念,因为在redux中,改变更新状态这个逻辑中的reducer是一个纯函数。这样的逻辑使得数据的管理更加的直观清楚明白。与Flux的另一个重要区别是,Redux假设从不修改数据。也可以很好地为状态使用普通对象和数组,但是强烈建议在reduce中对它们进行修改。

2.Elm

  其是一种函数式编程语言,其具有与redux相同的更新结构(state,action) => (action),与Redux不同,Elm是一种语言,因此它能够从许多方面受益,比如强制纯度、静态类型、开箱即用的不变性和模式匹配(使用case表达式)。

3.Immutable

  其是一个实现持久数据的结构的一个JS库。其可以与redux进行正交使用。redux中的store里面的储存的内容可以是普通对象,也可以是不可变对象,也可以是其他对象。

对于Immutable,可能需要一种(反)序列化机制来编写通用应用程序,并从服务器水化它们的状态,但除此之外,您可以使用任何数据存储库,只要它支持不变性。即使不可变库支持游标,也不应该在Redux应用程序中使用它们。整个状态树应该被认为是只读的,应该使用Redux更新状态并订阅更新。因此,通过游标写入对Redux没有意义。如果游标的惟一用例是将状态树与UI树解耦,并逐步细化游标,那么应该转而考虑选择器。选择器是可组合的getter函数。

4.Baobab

  其又是另外一种完成好的JSAPI,用于更新js中的普通对象。将其与redux联合使用时,会有一点好处。

  Baobab提供的大多数功能都与用游标更新数据有关,但是Redux强调,更新数据的惟一方法是分派一个操作。因此,它们以不同的方式解决相同的问题,并不互补。
   与Immutable不同的是,Baobab还没有实现任何特殊的有效数据结构,所以与Redux一起使用并没有什么好处。在这种情况下,使用普通对象更容易

5.RxJs

  是一种最好的方式去管理异步应用程序的复杂性,当其与redux一起使用时,会是整个程序运行的更好,例如在下面的这个例子

如果已经使用Rx,也可以不需要Redux 。在Rx中重新实现Redux并不难。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值