数据管理工具Flux、Redux、Vuex的区别
主要讲解一下前端为什么需要进行数据管理,有效的数据管理应该是什么样子的,最后挑选Flux、Redux、Vuex进行对比讲解。
为什么要进行数据管理?
组件式开发的核心思路是MVC,Model层的数据发生变化,驱动View层的视图发生变化。试想一个场景,如果ModelA触发ModelB变化,导致ViewB发生变化,ViewB发生变化时,触发了ModelC变化,ModelC又触发了其他Model的变化...,我们想知道一个View的变化究竟是那个数据导致的,追查起来就很困难,于是就记录数据的变化就很有必要了,其实换一个高大上的名字就是数据状态管理。
怎么有效地进行数据管理?
1. 数据集中管理
view中的数据统一放置到一个仓库(store)中,要渲染页面的时候,从中取出当前状态的数据(state),然后将state中的最新的数据通过props传递到组件中,然后渲染组件,实现试图展现。
2. 精细化拆解数据操作
要修改store中的state,为了做到数据的操作可追溯,尽量将数据的操作拆解成一个个小函数,当然纯函数最好。
3. 单向数据驱动
组件中不能直接修改state的值,修改state,只能发出修改请求(action),由action触发数据操作。
总之,数据集中管理就需要应用使用唯一的数据Tree,存放在store中;精细化拆解数据操作就是需要提供小而纯的函数,来修改state;单就向数据驱动需要提供唯一能修改state的渠道。
数据管理工具
1. Flux
Flux数据流的顺序是:
View发起Action->Action传递到Dispatcher->Dispatcher将通知Store->Store的状态改变通知View进行改变

2. Redux
Redux相对于Flux的改进:
把store和Dispatcher合并,结构更加简单清晰
新增state角色,代表每个时间点store对应的值,对状态的管理更加明确
Redux数据流的顺序是:
View调用store.dispatch发起Action->store接受Action(action传入reducer函数,reducer函数返回一个新的state)->通知store.subscribe订阅的重新渲染函数

3. Vuex
Vuex是专门为Vue设计的状态管理框架,
同样基于Flux架构,并吸收了Redux的优点
Vuex相对于Redux的不同点有:
- 改进了Redux中的Action和Reducer函数,以mutations变化函数取代Reducer,
- 无需switch,只需在对应的mutation函数里改变state值即可
- 由于Vue自动重新渲染的特性,无需订阅重新渲染函数,只要生成新的State即可
Vuex数据流的顺序是:
View调用store.commit提交对应的请求到Store中对应的mutation函数->store改变(vue检测到数据变化自动渲染)

ps:vuex官方Vue+vuex小demo
使用数据管理工具的场景
数据管理主要是方便SPA开发时,管理多个组件或子页面的公用数据,如果仅仅是简单个的单页,您最好不要使用Redux或Vuex。
相关资料
redux官方文档:https://cn.redux.js.org/
redux视频:https://www.youtube.com/watch?v=VJ38wSFbM3A
vuex官方文档:https://vuex.vuejs.org/zh/
flux阮一峰文档:http://www.ruanyifeng.com/blog/2016/01/flux.html
数据管理工具Flux、Redux、Vuex的区别的更多相关文章
- iOS 设备数据管理工具 iMazing v2.10.3 绿色便携版
iMazing 是一款可以帮助用户管理 iOS 设备的软件,功能远远超出 iTunes.iMazing 连接你的 iOS 设备(iPhone. iPad 或 iPod)相连,使用起来也非常的方便.你可 ...
- dolt 基于git协议的数据管理工具
dolt 基于git 协议提供了多版本,分支特性的数据管理工具,使用简单,同时也提供了类似github 的一个云服务 安装 下载地址 https://github.com/liquidata-inc/ ...
- 一款基于 Web 的通用数据管理工具(转载)
一款基于 WEB 的通用数据管控工具 - CloudQuery 前言 前段时间,公司因为业务发展,数据量攀升,老板迫切需要一个工具对数据进行精细化管理,一是确实需要精细化管理:二是因为我们公司小,数据 ...
- Data Management Tools(数据管理工具)《一》
数据管理工具 1.LAS数据集 # Process: LAS 数据集统计数据 arcpy.LasDatasetStatistics_management("", "SKI ...
- Data Management Tools(数据管理工具)《二》
(数据管理工具)<二> 点击跳转(数据管理工具)<一> 16.打包 # Process: 共享包 arcpy.SharePackage_management("&qu ...
- 报表工具和BI商业智能的区别,你真的弄清楚了吗?
许多人在投身大数据行业的时候,肯定会听到的两个词就是"报表工具"和"BI商业智能".但是大部分人并不太清楚这两者之间的概念和区别,认为报表就是BI,BI就是报表 ...
- Flux --> Redux --> Redux React 入门
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
- Flux --> Redux --> Redux React 基础实例教程
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
- Flux --> Redux --> Redux React 入门 基础实例使用
本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
随机推荐
- visual studio 2015安装win10 SDK文件校验错误的解决方法
这段时间想看一下UWP开发,于是下载了visual 2015 update1社区版,但是在安装完成时提示,windows 10 sdk文件校验码错误,如下图(图片是借用的,我当时没有截屏,错误号是一样 ...
- Oracle数据库案例整理-Oracle系统执行失败-sql_trace至TRUE导致Oracle在根文件夹中缺乏可用空间
1.1 述 在"$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace"文件夹下产生大量"oracle_w ...
- 弄App Store提示和技巧推荐
众所周知上苹果的主页推荐是对产品最佳(高曝光率+零广告费)推广,然而苹果却对选择的方式和规则讳莫如深. 下面是搜集的一些获得推荐的开发人员的经验. 1. 产品要新颖.且质量上乘.这个质量包括非常多细节 ...
- java基础篇---文件上传(组件)
转载自:http://www.cnblogs.com/oumyye/p/4234969.html 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本 ...
- 从Client应用场景介绍IdentityServer4(五)
原文:从Client应用场景介绍IdentityServer4(五) 本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置. 一.新建 ...
- jQuery分离构造器
http://www.imooc.com/code/3401 通过new操作符构建一个对象,一般经过四步: A.创建一个新对象 B.将构造函数的作用域赋给新对象(所以this就指向了这个新对象) ...
- EPI_H/EPI_V(边缘保持指数,matlab 矢量化编程)
EPI: edge preservation index,衡量对原始图像的操作(目标图像)对图像边缘的保持能力. EPI_H:horizontal ,水平方向: EPI_V:vertical,垂直方向 ...
- 期刊(Journal)、会议(Conference)及其影响因子(Impact Factor)
CNCC:China National Computer Congress,中国计算机大会 0. 会议 计算机视觉(CV)三大顶级会议: ICCV: IEEE International Confer ...
- Java之"Mozilla Rhino"引擎(二)
在Java中使用Rhino, 能让你使用类似Groovy, ECMAScript...等等之类的不同动态脚本语言, 其中值得推荐的是ECMAScript, 它是Rhino的默认实现, 同时也在JDK1 ...
- jquery获取选中的值和设置单选扭选中
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...