前端状态管理:Vuex、Flux、Redux、MobX概念篇

news2024/11/19 4:22:59

概念准备

【状态管理模式】

可以借鉴 Vuex 官方文档的解释:什么是“状态管理模式”

状态管理的目标(意义)

各组件通过数据响应机制对共享状态进行高效的状态更新,说白了就是不同组件对需要共享的数据的变更和同步。

1. Vuex - 主要用于 Vue

在这里插入图片描述

1.1 Vuex 中的核心概念

1.1.1 Store

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  2. 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

1.1.2 State - 单一状态树

Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT)”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。
可以通过 mapState 辅助函数将 state 作为计算属性访问,或者将通过 Store 将 state 注入全局之后使用 this.$store.state 访问。
State 更新视图是通过 vue 的双向绑定机制实现的。

1.1.3 Getter

Getter 的作用与 filters 有一些相似,可以将 State 进行过滤后输出

1.1.4 Mutation

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。并且只能是同步操作。Vuex 中通过 store.commit() 调用 Mutation

1.1.5 Action

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。
    一些对 State 的异步操作可以放在 Action 中,并通过在 Action 提交 Mutaion 变更状态。
  • Action 通过 store.dispatch() 方法触发。
  • 可以通过 mapActions 辅助函数将 vue 组件的 methods 映射成 store.dispatch 调用(需要先在根节点注入 store)。

1.1.6 Module

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割

1.2 Vuex 的特点

  • 单向数据流
  • 单一数据源,全局只有一个 Store 实例

2. Flux - 一种架构思想

类似于 MVC、MVVM 等,它给出了一些基本概念,所有的框架都可以根据他的思想来做一些实现。
在这里插入图片描述

2.1 Flux 中的核心概念

2.1.1 View

这里的View 是视图层,可以是 Vue 的,也可以是Rect 的。

2.1.2 Action

即数据改变的消息对象(可以通过事件触发、或者测试用例触发等),同样 Store 只能通过 Action 进行修改,具体 Action 的处理逻辑一般放在 Store中,Action 对象包含 type(类型) 和 payload (传递参数)。

2.1.3 Dispatcher

dispatcher 就像是一个中转站,收到 View 的 Action 然后转发给 Store

2.1.4 Store

数据层,存放应用状态与更新状态的方法,一旦发生改变就提醒 View 更新页面

2.2 Flux 的特点

  • 单向数据流
  • Store 可以有多个
  • Store 不仅存放数据,还封装了处理数据的方法

3.Redux

在这里插入图片描述
Redux 和 Flux 有些相同的地方,也有不同的地方,它没有 Dispatcher 而是在 Store 中集成了 dispatch 方法

3.1 Redux 中的核心概念

3.1.1 Reducer

是一个用来改变 state 的纯函数,传入state 通过应用状态与 Action 推导出新的 state。

3.1.2 Action 同 Flux 中的 Action

3.1.3 Store

存储应用 state 以及用于触发 state 更新的 dispatch 方法等,单一的 Store 。
Store 中提供了几个 API :
store.getState(): 获取当前 state。
store.dispatch(action): 用于 View 发出 Action。
store.subscribe(listener): 设置监听函数,一旦 state 变化则执行该函数(若把视图更新函数作为 listener 传入,则可触发视图自动渲染)。

3.2 Redux 的特点

  • 单向数据流
  • 单一数据源 ,只有一个 Store 和 Vuex 一样
  • state 是只读的,每次状态更新后返回一个新的 state
  • 和 Flux 相比,没有 Dispatcher ,但是 Store中集成了 dispatch 方法,该方法是 View 发出 Action的唯一途径。

4.Mobx

在这里插入图片描述
前面所讲的都是 Flux 体系,即都是单向数据流方案,接下来的 Mobx 可就不太一样了。
Mobx 的思想:当状态发生改变时,所有应用到状态的地方都会自动更新
Mobx 和 Flux 、 Redux 一样都是和具体的前端框架无关,可以用于 React 也可以用于 Vue,但是更常用于 React,很少用于 Vue

4.1 MobX 的核心概念

4.1.1 Actions

动作,和前面的类似,也是用于改变 State

4.1.2 State

驱动应用的数据

4.1.3 Computed values

计算值,但你创建一个基于当前状态的值需要使用 computed

4.1.4 Reactions

当前状态改变时自动发生。

4.2 MobX的特点

  • 基于面向对象
  • 局部精确更新,只有用到的数据才会引发绑定;
  • 代码入侵性小
  • 往往是多个 Store
  • 大型项目使用 MobX 会使得代码不方便维护,一般用于中小型项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学网络运维与安全前景怎么样?

近几年,网络安全问题频频爆发,多数人看不到背后的隐患,但是,企业却因此损失惨重。比如:FaceBook数据泄露2018年上半年,FaceBook 5000万用户数据泄露,导致其市值蒸发360亿美元,品牌遭遇声誉危机。…

markdown和latex常用部分参考@注脚@链接跳转@csdn

文章目录refmarkdown和latex常用部分参考typora文档基础语法扩展语法链接内联链接的方式将链接提取出来链接示例typora的支持LinksInline LinksInternal Links🎈Reference LinksURLs文章内部跳转(Heading IDs)🎈My Great Heading注脚(Footnotes)&#x1…

攻防世界1.新手练习区

4.攻防世界1.新手练习区 1.view_source 访问url: http://111.200.241.244:48855/ 鼠标点击右键不起作用,F12审查元素 得到flag为cyberpeace{0f3a3e4ab8c8664f3cf40d4240ec7b53} 2.robots 访问url: http://111.200.241.244:34362/ rob…

VMware vSphere 8.0b 发布下载 - 企业级工作负载平台

ESXi 8.0.0b & vCenter Server 8.0.0b GA (General Availability) 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 2023-02-14,vSphe…

机器学习笔记之生成模型综述(五)重参数化技巧(随机反向传播)

机器学习笔记之生成模型综述——重参数化技巧[随机反向传播]引言回顾神经网络的执行过程变分推断——重参数化技巧重参数化技巧(随机反向传播)介绍示例描述——联合概率分布示例描述——条件概率分布总结引言 本节将系统介绍重参数化技巧。 回顾 神经网络的执行过程 上一节…

机器视觉----易灵思FPGA

一、机器视觉概述 机器视觉无处不在,产品上如果有了机器视觉,那么这个产品在很大的意义上已经赋予了机器智能。例如机器人、无人机、工业检测,这些都需要机器视觉,但是他们的传感器和算法都不同。我们今天重点讨论工业相机行业的应…

大模型相关技术综述

中文大模型、多模态大模型&大模型训练语料持续迭代大模型演进历史预训练模型word2vecword2vec属于NLP领域无监督学习和比较学习的先祖。精髓在于可以用不带标签的文本语料输入神经网络模型,就可以学习到每个词的带语的词向量表示。它背后原理其实就是人类讲出来…

真实3D地形生成器【免费在线】

Terrain3D是一个免费的在线3D地形生成器,只需指定地球上的坐标,就可以自动生成附近区域的3D地形同时叠加卫星影像,并且可以导出GLTF格式的3D地形模型。 推荐:使用 NSDT场景设计器 快速搭建 3D场景。 使用Terrain3D生成真实世界的3…

字节青训营——秒杀系统设计学习笔记(三)

限流算法 限流顾名思义,就是对请求或并发数进行限制;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限,就需要对调用我们服务的上游请求进行限制,以防止自身服务由于资源耗尽而…

JavaSE学习day7_02 封装和构造方法

4. 封装 面向对象的三大特征: 封装、继承、多态 封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。 比如人画圆:”画“这个行为应该封装在圆这个类,为什么?因为”画“圆要知道圆…

Pandas基础与实例——人工智能基础

本文目录一、 Series1. 将列表强转为Series2. 将字典强转为Series3. 访问Series中的数据3.1 第一套检索方法3.2 第二套检索方法4. Series常用属性二、Pandas日期类型数据处理1. 将字符串转为datetime类型2. 与1等价的方式3. 单独取出年月日4. 日期运算5. 生成一组日期6. 生成工…

AJAX笔记(二)Fetch和axios

1、Fetch 1.1、XMLHttpRequest的缺陷 1.2、fetch的get写法 1.3、fetch的post写法 1.4、fetch的put写法 1.5、fetch的patch写法 1.6、fetch的delete写法 2、axios 2.1、axios的介绍 2.2、axios的get写法 2.3、axios的post写法(图一json写法和图二三form写法&#x…

Django项目部署-uWSGI

Django项目部署-uWSGIDjango运维部署框架整体部署架构web服务器与web应用服务器的区别部署环境准备安装python3安装mariadb安装Django和相关模块Django托管服务器uWSGI使用uWSGI配置使用Django运维部署框架 整体部署架构 操作系统: Linux 。优势:生态系统丰富&…

NC113 验证IP地址

验证IP地址_牛客题霸_牛客网 描述 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址 IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1&#…

苹果手机怎么下载手机铃声?图文教程,快速学会

很多小伙伴喜欢使用苹果手机,可是苹果手机里的铃声自己并不是很喜欢听,想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声?别着急,今天小编以图文的方式,教教大家如何使用苹果手机下载手机铃声。 苹…

验证码绕过与识别

目录 验证码绕过 前言 删除cookie绕过 未销毁复用验证码 验证码识别 工具 使用流程 验证码绕过 前言 之前pikachu靶场有两道验证码绕过的题目,分别是(on client 前端验证验证码)和(on server 未销毁复用验证码),具体见下面的文章 Pikachu靶场…

IDEA热部署JRebel 插件

JRebel 是什么? 在我们的日常开发工作中,一般是都是 IDEA + Tomcat 部署运行 web 项目。项目运行之后,如果你修改了 Java 代码,想要生效就必须得重启 Tomcat 服务器才行。改一次代码就要重启一次,真的是太麻烦了,这会严重影响我们的开发效率。 那么有没有什么办法让我们不…

c语言入门-4-常量

c-常量正文字面常量1、字面常量2、const修饰的常变量3、#define 定义的标识符常量4、 枚举常量深度解析1 什么是常量2 常变量为什么不能定义数组的长度3 枚举的作用是什么4、C语言为何需要枚举?下一篇正文 变得量叫变量,不变的量叫常量 字面常量 1、字…

1. QSaveFile和QFile的简单使用

1. 说明 QSaveFile和QFile两个类都是用来操作文件的,区别在于QSaveFile在对文件进行写入时有一种保护机制,再写入出错时,不会对源文件中的内容进行操作。该类在执行写操作时,会先将内容写入到一个临时文件中,如果没有…

Flink Checkpoint 中的Aligned Checkpoint 和 Unaligned Checkpoint

文章目录知识点反压CheckpointBarrierAligned CheckpointUnaligned Checkpoint核心思想实现原理UC同步阶段UC异步阶段知识点 反压 反压是流式系统中关于处理能力的动态反馈机制,并且是从下游到上游的反馈,一般是在实时数据处理的过程中,上游…