BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 刘嘉洋 关注 0 他的粉丝 发布于 2015年12月4日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

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

Redux是受到了Facebook FluxElm启发的应用构架。像在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好读者(已满),InfoQ读者交流群(#2)InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT