写点什么

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:005818
用户头像

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

关注

评论

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

表格检测识别技术的发展历程

合合技术团队

人工智能 算法 表格识别

深入理解CSS Grid网页布局,并通过示例代码来演示如何使用它

兴科Sinco

前端 前端开发 网页布局 CSS Grid 网络相册

Okhttp 的 retrofit2 运行警告信息异常

HoneyMoose

Matlab常用图像处理命令108例(一)

timerring

图像处理 数字图像处理

热点面试题:Vue2、3 生命周期及作用?

沉浸式趣谈

JavaScript 生命周期 Vue 3 vue2 前端面试题

死磕Spark事件总线——聊聊Spark中事件监听是如何实现的

Java 大数据 spark 事件监听

OpenAI-J 如何进行测试

HoneyMoose

Amazon GuardDuty 的新增功能 – Amazon EBS 卷的恶意软件检测

亚马逊云科技 (Amazon Web Services)

燃!网易架构大牛熬夜手敲千页网络协议笔记,竟在GitHub标星数万

Java 计算机网络 网络协议

字节一面:“为什么网络要分层?每一层的职责、包含哪些协议?”

Java 计算机网络 网络协议

全面项目管理软件:Project Office 激活版

真大的脸盆

项目管理 Mac Mac 软件 项目流程

深度解析首个Layer3 链 Nautilus Chain,有何优势?

股市老人

厉害了!刷完这份 532 算法秘笈后,我成功斩获字节、快手offer

Java 数据结构 面试 算法

看完这一篇,ShardingSphere-jdbc 实战再也不怕了

勇哥java实战分享

IBM Semeru Windows 下的安装 JDK 17

HoneyMoose

深度解析首个Layer3 链 Nautilus Chain,有何优势?

西柚子

GridView(网格视图)的基本使用

芯动大师

ListView Android; girdview

从ChatGPT到AGI还有多远?| 社区征文

轻口味

ChatGPT

应该升级 JDK 到 17 了吗

HoneyMoose

面试官:如何防止 Java 源码被反编译?我:有点懵

Java Java源码

云边端协同时序数据库的挑战与解决方案

CnosDB

时序数据库 开源社区 CnosDB 云边端协同

在 Linux 上有哪些运行程序的方式?

蓬蒿

Shell fork Linux 上启动程序 execv

普通大专生,从面试无人问到拿下阿里offer!说说我的艰辛历程

Java 面试 专科

解决mac电脑打开应用“意外退出”的问题 (点按“重新打开”以再次打开应用程序)

Rose

意外退出 Mac软件

苹果办公必备远程工具:Royal TSX使用教程

Rose

SSH Royal TSX 教程 Royal TSX 破解 Royal TSX mac下载

阿里内网开源:多位大佬联合撰写的Java多线程手册被我拿到了

Java 多线程

图数据结构-路径查找

alexgaoyh

DFS 图数据库 知识图谱 路径规划 三元组

学会用规则引擎Drools,让你早点下班

JAVA旭阳

Java drools

BetterSnapTool for Mac 帮你整理窗口,提升效率

Rose

BetterSnapTool 窗口管理软件 mac软件下载

学会用规则引擎Drools,让你早点下班

小小怪下士

Java 程序员 后端 drools

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