浅谈 React、Flux 与 Redux

浅谈在React中使用Redux数据流(一) Ctrl+G:跳转到第几行 Ctrl+Tab:切换窗口 Command+W:关闭当前打开文件 Command+Q:关闭sublime Command+D:选择相同的单词,重复可选择下一个相同的单词 Command+L:选择行,重复可选择下一行 Command+X:删除当前行 Command+F:查找 Command+Shirt+F:查找并替换 Command+R:查找函数名 C 阅读详情

浅谈 React、Flux 与 Redux

本文作者:imweb ShiJianwen 原文出处:imweb社区 未经同意,禁止转载

React

React 是一个 View 层的框架,用来渲染视图,它主要做几件事情:

  • 组件化
  • 利用 props 形成单向的数据流
  • 根据 state 的变化来更新 view
  • 利用虚拟 DOM 来提升渲染性能

前面说到 React 能够根据 state 的变化来更新 view,一般来说引起 state 变化的动作除了来自外部(如服务器),大部分都来自于页面上的用户活动,那页面上的用户活动怎样对 state 产生作用呢?React 中每个组件都有 setState 方法用于改变组件当前的 state,所以可以把更改 state 的逻辑写在各自的组件里,但这样做的问题在于,当项目逻辑变得越来越复杂的时候,将很难理清 state 跟 view 之间的对应关系(一个 state 的变化可能引起多个 view 的变化,一个 view 上面触发的事件可能引起多个 state 的改变)。我们需要对所有引起 state 变化的情况进行统一管理,于是就有了 Flux。

Flux

Flux 是一种应用架构,或者说是一种思想,它跟 React 本身没什么关系,它可以用在 React 上,也可以用在别的框架上。前面说到 Flux 在 React 中主要用来统一管理引起 state 变化的情况。Flux 维护着一个或者多个叫做 Store 的变量,就像 MVC 里面的 Model,里面存放着应用用到的所有数据,当一个事件触发时 ,Flux 对事件进行处理,对 Store 进行更新,当 Store 发生变化时,通常是由应用的根组件(也叫 controller view)去获取最新的 store,然后更新 state,之后利用 React 单向数据流的特点一层层将新的 state 向下传递实现 view 的更新。这里的 controller view 可以有多个也可以不是根组件,但是这样数据流维护起来就比较麻烦。

Flux 的思维模型如下: 

Flux 主要包括四个部分,Dispatcher、Store、View、Action,其中 Dispatcher 是 Flux 的核心枢纽,它相当于是一个事件分发器,将那些分散在各个组件里面的逻辑代码收集起来,统一在 Dispatcher 中进行处理。完整的 Flux 处理流程是这样的:用户通过与 view 交互或者外部产生一个 Action,Dispatcher 接收到 Action 并执行那些已经注册的回调,向所有 Store 分发 Action。通过注册的回调,Store 响应那些与他们所保存的状态有关的 Action。然后 Store 会触发一个 change 事件,来提醒 controller-views 数据已经发生了改变。Controller-views 监听这些事件并重新从 Store 中获取数据。这些 controller-views 调用他们自己的 setState() 方法,重新渲染自身以及组件树上的所有后代组件。使用 Flux 有个好处就是我只需要用 action 对象向 Dispatcher 描述当前的事件就可以执行对应的逻辑,因为 Dispatcher 是所有 Action 的处理中心,即使没有对应的事件发生,我们也可以“伪造”一个出来,非常利于测试。

Redux

Redux 的作用跟 Flux 是一样的,它可以看作是 Flux 的一种实现,但是又有点不同,具体的不同总结起来就是:

1. Redux 只有一个 store Flux 里面会有多个 store 存储应用数据,并在 store 里面执行更新逻辑,当 store 变化的时候再通知 controller-view 更新自己的数据,Redux 将各个 store 整合成一个完整的 store,并且可以根据这个 store 推导出应用完整的 state。同时 Redux 中更新的逻辑也不在 store 中执行而是放在 reducer 中。 2. 没有 DispatcherRedux 中没有 Dispatcher 的概念,它使用 reducer 来进行事件的处理,reducer 是一个纯函数,这个函数被表述为 (previousState, action) => newState,它根据应用的状态和当前的 action 推导出新的 state。Redux 中有多个 reducer,每个 reducer 负责维护应用整体 state 树中的某一部分,多个 reducer 可以通过 combineReducers 方法合成一个根reducer,这个根reducer负责维护完整的 state,当一个 action 被发出,store 会调用 dispatch 方法向某个特定的 reducer 传递该 action,reducer 收到 action 之后执行对应的更新逻辑然后返回一个新的 state,state 的更新最终会传递到根reducer处,返回一个全新的完整的 state,然后传递给 view。

在我看来,Redux 和 Flux 之间最大的区别就是对 store/reducer 的抽象,Flux 中 store 是各自为战的,每个 store 只对对应的 controller-view 负责,每次更新都只通知对应的 controller-view;而 Redux 中各子 reducer 都是由根reducer统一管理的,每个子reducer的变化都要经过根reducer的整合。用图表示的话可以像这样:

Flux 中的 store 是这样的: 

Redux 中的 store(或者叫 reducer)是这样的: 

ps:刚接触 React,很多地方了解地不是特别深入,如有错漏,欢迎指正。

react全局状态管理_鲸技术:浅谈React的状态管理 0前言随着鲸钱包的不断壮大,用户规模的不断增加,项目变得越来越庞大,业务逻辑也越来越复杂。与此同时,前端技术也在迅猛发展。对前端工程师来说,这既是机遇,也是挑战。如何给用户提供更流畅的交互?如何更好的进行代码维护和扩展?为了解决此类问题,我们选择了React。React是Facebook开源的一款JavaScript库,其具有以下优点:目前前端使用的技术栈是Express + jQuer... 阅读详情

相关推荐

ESP32S3 Sense开发板实战:摄像头+麦克风+AI语音拍照全攻略

端侧AI是嵌入式开发的热门方向,在资源受限的MCU上同时实现视觉与语音感知,需要从硬件架构、外设驱动到模型部署的完整技术链路。ESP32S3作为集成双核处理器、Wi-Fi蓝牙和PSRAM的高性能芯片,为低成本语音视觉终端提供了理想平台。通过DVP接口连接OV2640摄像头采集图像,借助I2S接口驱动ES8311音频编解码器完成高信噪比录音,再配合ESP-SR或Edge Impulse实现自定义唤醒词识别,能够构建真正的智能语音拍照设备。这类方案广泛应用于智能家居、可穿戴设备和离线语音交互场景,兼顾功耗、体积

weixin_34246551的博客 427

【React全家桶】Flux与Redux

单一数据源整个应用的state被储存在一棵object tree中,并且这个object tree只存在于唯一 一个store中State是只读的唯一改变state的方法就是触发action,action是一个用于描述已发生事件的普通对象.使用纯函数来执行修改描述action如何改变staet tree,需要编写reducers.

m0_61016904的博客 1886

React:Redux和Flux

组件就获取最先的数据,来完成重新新渲染。当我们获取到数据后,根据React自上而下的渲染方式,我们把数据传给顶层组件,由顶层组件通过属性props,将数据传给各个子组件,这样数据就一层一层传递下去,各个子组件获取自己所需的数据,最终完成UI的渲染。Redux是FLux的一种实现形式,保留了数据流的单向性,除了flux原本的几个模块,还添加了reducers和middlewares。在一个React应用中,UI部分是由无数个组件嵌套构成的,组件和组件之间就存在层级关系,也就是父组件、子组件以及顶层组件。

读心悦 540

深入浅出认识理解React、Flux和Redux

深入浅出认识理解React、Flux和Redux

weixin_43443341的博客 657

【顾邦小讲堂】第二十四期 电源环路测试从入门到精髓:一文掌握环路测试原理与电压注入点选择依据

电源环路测试是评估开关电源、线性电源等闭环系统稳定性的核心手段,直接关系到电源的稳定性、输出精度、动态响应、抗干扰能力甚至可靠性

GBupupup的博客 2117

人类肠道微生物群落代谢建模

MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。

多组・学・多组学 1169

React高级篇(一)从Flux到Redux,react-redux(转)

React框架本身只应用于View,如果基于MVC模式开发,还需要Model和Control层,这样催生了Flux的产生,而Redux是基于Flux理念的一种解决方式。 从《React入门系列》可知,组建直接传递参数或者事件都需要props一层层代理,对于复杂组件,它可能嵌套的子组件非常多,层级也比较深,那么,如果还采用props链条来维护组件通信或者数据共享,将非常困难,也不利于开发和维护。 ...

永不消失的彩虹的博客 334

【ESP32-IDF】I2S音频协议实战:从PDM麦克风到PCM扬声器的全链路解析

本文深入解析ESP32-S3的I2S音频协议,从PDM麦克风采集到PCM扬声器输出的全链路实现。详细介绍了硬件PDM转PCM、Standard模式配置及混合模式协同工作,提供实战代码与性能优化建议,助力开发者高效完成嵌入式音频项目开发。

pea55的博客 888

TD3算法实战:如何用双延迟DDPG解决Actor-Critic中的高估问题(附完整代码)

本文深入解析TD3算法如何通过双延迟DDPG机制解决Actor-Critic中的价值高估问题。文章详细阐述了其三项核心改进:Clipped Double Q-learning、延迟策略更新和目标策略平滑,并提供了在Hopper-v1环境上的完整PyTorch实战代码,帮助读者稳定训练深度强化学习模型。

yolo5detector的博客 466

智能问数系统的完整技术栈与实现逻辑

提取并增强数据库 Schema(含业务语义)选择 LLM(开源 qwen2 / 商业 GPT-4o)构建 RAG 向量库(存储历史问法)实现 SQL 安全校验与权限控制添加结果自然语言解释 + 可视化部署到只读数据库环境🔑核心原则“先保证安全,再追求智能”—— 一个能生成错误 SQL 的智能问数系统,比没有更危险。

我们的征途是星辰大海 1625

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6614

【转】浅谈React、Flux 与 Redux

本文转自《浅谈React、Flux 与 Redux》,转载请注明出处。 React   React 是一个 View 层的框架,用来渲染视图,它主要做几件事情: 组件化 利用 props 形成单向的数据流 根据 state 的变化来更新 view 利用虚拟 DOM 来提升渲染性能   前面说到 React 能够根据 state 的变化来更新 view,一般来说引起 ...

weixin_33910759的博客 103

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2232

浅谈 React、Flux 与 Redux(各个的运行机制)

React React 是一个 View 层的框架,用来渲染视图,它主要做几件事情: 组件化利用 props 形成单向的数据流根据 state 的变化来更新 view利用虚拟 DOM 来提升渲染性能 前面说到 React 能够根据 state 的变化来更新 view,一般来说引起 state 变化的动作除了来自外部(如服务器),大部分都来自于页面上的用户活动,那页面上的用户活动怎样对 s...

special_programmer的博客 1820

『Apisix进阶(九)』基于Upstream实现服务转发的最佳实践

本篇文章将以服务转发为核心,带你从原理到实战,深入了解 Upstream 的配置方法与常用场景。

老陈聊架构 1515

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1047

浅谈Redux

React只是一个MVC中的视图层,只负责页面的渲染,如果涉及到数据管理,那么在MVC中,就需要用到M和C,Facebook对于当时的MVC框架并不满意,于是有了Flux,Flux不是一个MVC框架,他是一种新的思想。当然,并不是所有的项目redux都适用,如果你与服务器没有大量交互。UI层也很简单,或者用户没有一些写作操作,那么是不建议使用redux的,这会增加复杂性。4、actions创建出对应的action,actions再调用dispatcher的dispatch方法将action传递过去。

weixin_50643343的博客 331

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

react知识点总结

浅谈react工作原理 Reactjs 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内部通过state来维护组件状态的变化,当组件的状态发生变化时,React通过虚拟DOM技术来增量并且高效的更新真实DOM。本文将对React 的这些特点进行简单的介绍。 v...

weixin_43250732的博客 680

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

浅谈redux-form在项目中的运用

准则 先说一下redux的使用场景,因为如果没有redux,那更不会有redux-form。 redux基于Flux架构思想,是一个状态管理框架,其目标是解决单页面应用中复杂的状态管理问题。 日常前端...

u011927449的博客 218

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浅谈Redux框架

什么是Redux "只有遇到 React 实在解决不了的问题,你才需要 Redux 。"   Redux是由FaceBook提出的Flux框架演变而来的,所以先明确一点,Redux 是一个有用的架构,但不是非用不可。事实上大多数情况,你可以不用它,只用 React 就够了。有人说过这样一句话:"如果你不知道是否需要 Redux,那就是不需要它。"Re

dengyaoning的专栏 1656

Redux 知识点梳理和实践

之前在有道云笔记上写过一篇 Redux 学习实践的文章,附带了一个小 Demo。由于一段时间没看 Redux,加上之前缺乏足够的练习,现在想重构个人博客,使用 Redux 进行状态。现在不得不回头再看看 Redux 相关东西。这里顺便记录下学习笔记,一来便于回顾,二来希望对他人有所帮助。笔记同步写在个人博客网站 这篇文章是知识点的梳理,如果你对 Redux 的基础有一定了解,阅读起来可能比较合适。...

weixin_33894640的博客 178

浅谈react

现在最热门的前端框架,毫无疑问是React。 上周,基于 React 的React Native发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑。 React 起源于 Facebook 的内部项目,因为该公司对市场上所有JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram的网站。做出来以后,发现这套东西很好用,就在2013年5...

weixin_30892987的博客 66

flux架构浅谈:什么数据才应该放store

相信很多用过react和vue等框架的人都有思考过这个问题。React的出现,随之带来了flux这一设计理念。从React的Reflux、Redux,再到vue的vuex,一路使用过来,我觉得是该总结一下的时候了。 多方观点: 1. store只存放公共数据,组件的数据、状态自行维护 2. 所有数据都应走store,view层只管展现数据,这也是flux官方所推荐的做法

Vilien (Mr.Bin) 技术笔记 2816

React | 高效前端之浅谈

React在国外已被各个公司的各种产品大量使用,大众熟知的INS、Airbnb、Yahoo、ThoughtWorks 等,都是使用React来实现UI开发的。很多人认为,虽然React在国外已经被广泛应用,但在国内,仍处新兴萌芽阶段。 到底React在国内境遇如何?据海说软件了解,阿里内部系统、支付宝新一代框架、美团内部系统、知乎、滴滴...

weixin_34351321的博客 111
上一篇: 测试用例的那一回事
下一篇: 图解微信公众号后台服务开发(nodejs版)
IMWebteam
博客等级 码龄10年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值