Flux 思想

本文涉及的产品
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
无影云电脑个人版,1个月黄金款+200核时
无影云电脑企业版,8核16GB 120小时 1个月
简介: Flux 是一种用于构建用户界面的应用程序架构,由 Facebook 推出。它通过单向数据流和集中管理的状态来提高应用程序的可维护性和可预测性,主要包含四大组件:Dispatcher、Store、View 和 Action。

一、Flux基本概念

Flux是Facebook用于构建客户端Web应用程序的一种架构模式。它主要是为了解决单向数据流动的问题,是一种和MVC(Model - View - Controller)等模式不同的应用架构理念。

  1. 核心目标

    • Flux的核心目标是通过严格的单向数据流来使应用的状态管理更加可预测。在复杂的JavaScript应用中,尤其是涉及到大量的用户交互和动态数据更新的情况下,数据的流动如果不加以规范,很容易导致混乱,比如难以追踪数据的变化源头、出现意外的UI更新等问题。Flux通过单向数据流来避免这些问题。
  2. 组成部分

    • Dispatcher(调度器):它是Flux架构的中心枢纽。所有的数据变更请求都要通过Dispatcher来分发。例如,在一个简单的待办事项应用中,当用户添加一个新的待办事项时,这个“添加”操作的请求会被发送到Dispatcher。它接收来自视图(View)发出的各种动作(Action),并将这些动作分发给对应的存储(Store)。Dispatcher可以被看作是一个交通警察,指挥着各种动作消息的流向。
    • Stores(存储):Stores包含了应用的状态和业务逻辑。它们负责保存数据,并对数据进行处理。继续以待办事项应用为例,一个待办事项的Store会保存所有的待办事项列表。当Dispatcher分发一个“添加待办事项”的动作时,待办事项Store会根据这个动作来更新自己内部保存的待办事项列表。Stores在更新数据后,会发出一个“change”事件来通知视图(View)数据已经发生了改变。
    • Views(视图):视图是用户界面的呈现部分。它监听Stores发出的“change”事件,当接收到事件后,会从Stores获取最新的数据来更新自己的显示内容。在一个基于React构建的Flux应用中,React组件通常扮演着视图的角色。例如,一个显示待办事项列表的React组件会在收到Store的“change”事件后,重新获取待办事项列表数据,并重新渲染自己,将最新的待办事项列表展示给用户。
    • Actions(动作):它是一个简单的JavaScript对象,包含一个动作类型(type)和一些可能的数据(payload)。动作通常是由视图(View)根据用户交互(如点击按钮、输入文字等)产生的。比如在待办事项应用中,一个“添加待办事项”的动作可能是{type: 'ADD_TODO', payload: '买牛奶'},其中“ADD_TODO”是动作类型,“买牛奶”是动作携带的数据。这些动作会被发送到Dispatcher,从而触发整个数据更新流程。

二、单向数据流示例

以一个简单的计数器应用为例来解释Flux的单向数据流。

  1. 用户交互阶段
    • 当用户在视图(View)中点击一个“增加计数”的按钮时,视图会创建一个“INCREMENT_COUNT”类型的动作(Action),这个动作包含了关于增加计数的信息。
  2. 调度阶段
    • 视图(View)会将这个动作发送到Dispatcher。Dispatcher接收到动作后,会查找注册了该类型动作的Stores,并将动作分发给它们。
  3. 存储更新阶段
    • 计数器的Store接收到“INCREMENT_COUNT”动作后,会根据这个动作来更新自己内部保存的计数状态。比如,将当前计数加1。在更新完状态后,Store会发出一个“change”事件,表示数据已经发生了改变。
  4. 视图更新阶段
    • 视图(View)监听到Store发出的“change”事件,会从Store获取最新的计数数据,然后更新自己的显示内容。这样,用户就能在界面上看到计数已经增加了。

这种单向数据流的好处是,数据的变化路径非常清晰。可以很容易地追踪数据是如何从用户交互产生动作,经过调度和存储更新,最后反映到视图上的。同时,由于数据的流动是单向的,避免了在复杂应用中可能出现的双向数据绑定导致的数据混乱问题。

相关文章
|
JavaScript 前端开发 Dubbo
注册中心设计 Ap 与 CP 区别|学习笔记
快速学习注册中心设计 Ap 与 CP 区别
1085 0
注册中心设计 Ap 与 CP 区别|学习笔记
|
3月前
|
Linux 虚拟化 iOS开发
macOS Tahoe 26 beta (25A5279m) ISO、IPSW、PKG 下载
macOS Tahoe 26 beta (25A5279m) ISO、IPSW、PKG 下载
863 6
|
机器学习/深度学习 算法 Python
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
773 0
使用Python实现深度学习模型:元学习与模型无关优化(MAML)
|
9月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
425 4
|
12月前
|
存储 人工智能 开发框架
蚂蚁集团开源项目 DB-GPT 和 VSAG 惊艳亮相,引领 AI 数据革命!
9月5日,在2024 Inclusion·外滩大会“从DATA for AI到AI for DATA”见解论坛上,由蚂蚁集团发起的,旨在提高数据库与大模型应用开发效率的“星辰智能社区”新发布了两个项目:AI原生数据应用开发框架DB-GPT新版本与向量索引库VSAG。
|
11月前
|
安全 物联网 5G
无线网络技术:5G之后的通信革命
【10月更文挑战第16天】本文探讨了5G之后无线网络技术的发展趋势,涵盖5G-A、Wi-Fi 7及未来通信技术展望。5G-A提升了网络速度、时延和连接数,Wi-Fi 7则在性能和可靠性上大幅跃升,未来通信技术将朝向更高速度、更低延迟、更广覆盖方向发展。
|
缓存 算法 Java
spring-三级缓存-生命周期-spring事务-IOC-AOP
spring-三级缓存-生命周期-spring事务-IOC-AOP
前端React篇之React setState 调用的原理、React setState 调用之后发生了什么?是同步还是异步?
前端React篇之React setState 调用的原理、React setState 调用之后发生了什么?是同步还是异步?
|
Python
在Python中绘制K线图,可以使用matplotlib和mplfinance库
【5月更文挑战第1天】使用Python的matplotlib和mplfinance库可绘制金融K线图。mplfinance提供便利的绘图功能,示例代码显示如何加载CSV数据(含开盘、最高、最低、收盘价及成交量),并用`mpf.plot()`绘制K线图,设置类型为'candle',显示移动平均线(mav)和成交量信息。可通过调整参数自定义图表样式,详情参考mplfinance文档。
660 2