Redux 使用了类似于 Flux 的单向数据流,但是它只有一个单一的store对象,这个store对象通过克隆原始的store来改变,它使用了一些函数,并不产生副作用。Redux中没有Dispatcher。
Redux 是受到了Facebook Flux和 Elm 启发的应用构架。像在Flux中一样,Redux中的数据流是单向的,这是为了简化应用构架并使得推论变得简单。不像Flux,在Redux中有一个单一的store对象,包含整个应用程序的state。这个store是由对象树结构组成的,它是不变的。每次state需要改变的时候,一个新的对象树就创造了出来,合并了先前state中的数据和改变的数据。当一个action对象被分派到store中的时候,改变就被触发。action是一个简单的对象,其中包含了需要执行的操作的类型以及一些负载。改变由reducers 来执行,reducers 是没有副作用的纯函数,将先前的state和一个action作为参数。它们会返回由应用action产生的新的state。
Store不是一个类,而是一个伴随着一些方法的对象。通过在应用程序的最初的state执行root reducer可以创造出store。为了扩展应用程序,我们需要添加附加的reducers。每个reducer都维护一个state树的一支。Redux提供了一个方法,可以将reducers合并成一个,当store被创造出来的时候,它可以做一个简单的调用。
不像Flux一样,在Redux中没有主要的Dispatcher。当一个action需要被执行时,store的dispatch()方法被调用,将action当作参数。然后所有的监听器被通知state已经改变了,它们可以选择去获取新的state,然后相应地呈现相关组成部分。
虽然Redux可以与任意的JavaScript框架一起使用来构建应用程序,它也是React的一个标准搭配,因为这个框架可以让开发者“把UI描述为state的函数”,Redux的关注点是基于不同的actions,安全地对state执行更新操作。
直到八月达到了2.1.0版本,Flux源源不断地在提交更新,但是近三个月内的改善非常少。 GitHub repository 指出到目前为止,125个问题已经解决,还有15个问题仍然悬而未决。它们是一些次要的增强请求,有些问题和文档有关,有些是询问,其中一个是错误报告。除非Facebook正在开发未开拓的市场,Flux现在看上去非常稳定,只有一小部分新的东西在我们眼前。
查看英文原文: Redux: An Architectural Style Inspired by Flux
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。