[译]Redux : 一个启发自Flux的架构风格

JerryXia 发表于 , 阅读 (0)

原文

Redux和Flux一样使用单向的数据流,但是其只有一个store,此store的改变是通过另外复制一份原有store,然后执行一些无副作用的纯函数完成的。Redux没有Dispacher。

Redux是一个启发自Facebook Flux和Elm的应用框架。和Flux一样,在redux中数据流也是单向的,这样可以简化应用的架构,然后更方便调试。和Flux的不一样的是,在Redux中,只存在一个store,其包含了应用中所有的state。这个store是一个对象树,并且是不可修改的。每当state需要改变,都会重新创建一个新的对象树,新的对象树由之前的state和变化合并而成。当一个action被dispatch到store时,便会触发一次state改变。action是一个包含了操作类型和一些参数的简单对象。改变是由reducer处理的,reducer是纯函数,没有副作用,它使用之前的state和一个action作为参数。会根据action,返回一个全新的state。

Store不是一个class,它是一个对象加上了一些方法。在根reducer运行时,会根据应用的初始state来创建store。应用扩张可以通过添加额外的reducers来完成。每一个reducer负责state树中的一份分支。Redux提供了一个方法把所有的reducer绑定成一个,从而可以在初始创建store时统一获得。

不像Flux,在Redux中没有中央dispatcher。每当需要执行一个action时,store的dispatch()方法会被调用,并使用该action作为参数。然后所有的监听者都会被通知state改变了。然后它们可以选择是否获取新的state,然后根据state值渲染相应的组件。

尽管Redux可以被任何JavaScript框架用来构建应用,但是它和React更加的契合,因为React将UI描述为state的函数,而Redux专注在基于各种action,安全的完成state的数据更新。