写点什么

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

  • 2015-12-03
  • 本文字数:1090 字

    阅读完需:约 4 分钟

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))。

2015-12-03 18:005642
用户头像

发布了 218 篇内容, 共 68.9 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

用大数据分析了一线城市1000多份岗位招聘需求,告诉你如何科学找工作

程序员柠檬

Python 数据分析

Markdown 几行字符就可以生成思维导图了!

JackTian

markdown 思维导图 markdown语法 markdown编辑器 Markmap

2020年南京第十三届智慧停车展会

南京专业智博会

展览会 博览会 智博会 展览会论坛会

ARTS打卡-01

Geek_yansheng25

ARTS 打卡计划

Linux下程序出问题不要慌,资深程序员教你6招搞定!

程序员柠檬

Linux 程序员 后台开发

ARTS-week-1

saddamwilson

ARTS 打卡计划

你真的清楚 Nginx 指令的规则吗?

子杨

nginx 运维

2020亚洲南京第十三届人工智能机器人服务展览会

南京专业智博会

展览会 论坛会 博览会 智博会

2020南京第十三届智慧工地装备展览会

南京专业智博会

展览会 论坛会 博览会 智博会

如何优雅地实现泛型类的类型参数化

KAMI

Java 编程 反射 泛型

10分钟白嫖我的常用的在线工具网站清单

JavaGuide

设计 在线工具 工具类网站 PDF

2020年南京第十三届物联网应用展览会

南京专业智博会

展览会 论坛会 博览会 智博会

2020年亚洲南京大数据产业展览会

南京专业智博会

展览会 论坛会 博览会 智博会

这可能是 Markdown 写微信公众号的一款神器了!

JackTian

效率工具 markdown markdown编辑器 markdownnice 神器

PageHelper

BitSea

Jupyter最佳实践

pydata

分布式锁🔒是个啥❓ 其实就这么点事

山中兰花草

Java redis 后端 分布式锁 开发

面试造飞机系列:说下微服务接口设计原则?

程序员柠檬

分布式 微服务 后端 架构设计

不忘初心,继续努力

一周思进

ARTS 打卡计划

Java 底层基础笔记(一)硬件

奈何花开

Java Linux 计算机基础

2020亚洲智能家居全屋智能展会-南京站

南京专业智博会

展览会 论坛会 博览会 智博会

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试

编程道与术

Java 编程 TDD 单元测试 JUnit

原创 面试官:你说对MySQL事务很熟?那我问你10个问题

程序员柠檬

MySQL 数据库

使用 PCA 进行降维可视化,了解特征分布

黄大路

数据挖掘 数据分析 可视化

思维模型 - 概念篇

石云升

学习 高效 思维模型 决策

github看代码效率提高10倍!因为用了sourcegraph这个工具

程序员柠檬

GitHub 程序员 效率工具

推荐几款有意思的小众App(05.30)

静陌

产品 App

k6新崛起的性能测试工具

风中之心

DevOps 性能 性能测试

如何衡量产品需求效果

黄大路

产品经理 产品设计 运营

Wireshark的使用与数据分析(一)

姬翔

游戏夜读 | 记忆里的老游戏

game1night

Redux:受Flux启发的一种架构风格_JavaScript_Abel Avram_InfoQ精选文章