Redux: Redux:受Flux启发的一种架构风格

jopen 8年前

 

Redux 使用了类似于 Flux 的单向数据流,但是它只有一个单一的store对象,这个store对象通过克隆原始的store来改变,它使用了一些函数,并不产生副作用。Redux中没有Dispatcher。

Redux 是受到了非死book 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个问题仍然悬而未决。它们是一些次要的增强请求,有些问题和文档有关,有些是询问,其中一个是错误报告。除非非死book正在开发未开拓的市场,Flux现在看上去非常稳定,只有一小部分新的东西在我们眼前。

查看英文原文: Redux: An Architectural Style Inspired by Flux