50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

Apache RocketMQ,构建云原生统一消息引擎

Apache RocketMQ

RocketMQ 云原生 消息队列 云栖大会

书本大纲:从芯片、分布式到云计算AI时代

poemyang

云计算 分布式 高并发

Solana 开发者拟将区块计算单位上限从 6000 万提升至 1 亿,带来繁荣的链上生态

PowerVerse

预制菜加工预制菜加工厂智能化生产管理MES系统全面解决方案厂智能化生产管理MES系统全面解决方案

万界星空科技

mes 预制菜加工 预制菜工厂 预制菜生产管理 食品加工MES

腾讯云TencentOS提交Swap Table补丁系列 Linux内核内存交换性能提升20%~30%

极客天地

MyEMS开源能源管理系统核心代码解读019

开源能源管理系统

开源 开源能源管理系统 代码解读 能源管理系统

微店商品详情API指南

tbapi

微店API 微店商品数据采集 微店商品详情API

基于模型蒸馏的大模型文案生成最佳实践

阿里云大数据AI技术

人工智能 大数据 大模型 大语言模型 大模型蒸馏

CTE查询数据量过大导致MySQL 8.0发生CORE问题解析

GreatSQL

Cisco vManage漏洞分析:从SSRF到Root权限的完整攻击链

qife122

网络安全 SD-WAN

收藏!国内120+AI Agent开发/构建平台大盘点(上):互联网、云计算、AI、传统软件厂商推出的智能体平台

王吉伟频道

智能体 AI Agent Agentic AI 智能体平台 Agent开发平台

AI英语口语练习APP的开发

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI英语

第十五章 SEO的简单免费工具

溪抱鱼

SEO SEO 优化

百度智能云获评信通院大模型云“全量领导者”,技术、落地能力双获认可

科技热闻

TEM on 腾讯云安装 + 试用指南

TiDB 社区干货传送门

AI英语口语练习APP的技术方案

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI英语

当AI学会品酒与问诊:DeepSeek的双智能体系统的奇幻物语

华为云开发者联盟

云主机 AI 智能体 DeepSeek v3 华为开发者空间

什么是关系型数据库?全面解析 RDBMS 核心原理与应用实践

镜舟科技

关系型数据库 RDBMS StarRocks 湖仓一体 实时分析

MyEMS开源能源管理系统核心代码解读020

开源能源管理系统

开源 开源能源管理系统 代码解读 能源管理系统

Apache RocketMQ ACL 2.0 全新升级

Apache RocketMQ

RocketMQ 云原生 消息队列

5000字谈普通人如何用AI利益最大化

阿星AI工作室

AI 产品经理 小白 工具集 AIGC

MyEMS开源能源管理系统核心代码解读018

开源能源管理系统

开源 开源能源管理系统 代码解读 能源管理系统

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 零代码 无代码 版本更新

我的代码背叛了我?为什么 a=1, b=2,最后x和y都等于0?

poemyang

并发编程 volatile 可见性 Java并发编程

深度剖析 RocketMQ 5.0 之消息进阶:如何支撑复杂业务消息场景?

Apache RocketMQ

RocketMQ 云原生 消息队列

金融企业项目实践 - 开发者空间OpenGauss数据库助力项目完成

华为云开发者联盟

云主机 GaussDB(for openGauss) 数据库、 华为开发者空间

电脑下载速度很慢怎么解决 提高电脑下载速度的软件推荐

阿拉灯神丁

视频下载器 idm下载 下载工具

深度剖析 RocketMQ 5.0 之事件驱动:云时代的事件驱动有啥不同?

Apache RocketMQ

RocketMQ 云原生 消息队列 事件总线Eventbridge

开发者空间安装ODBC驱动,编写应用程序操作GaussDB数据库

华为云开发者联盟

数据库 华为云 Gauss DB ODBC 华为开发者空间

精彩瞬间:阿里云 KubeCon China 2025 之行回顾!

阿里巴巴云原生

阿里云 云原生 KubeCON

深度剖析 RocketMQ 5.0 之 IoT 消息:物联网需要什么样的消息技术?

Apache RocketMQ

RocketMQ 云原生 物联网 IoT 消息队列

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