数据管理工具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相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...
随机推荐
- DDD实战6 单元测试
1.在Products解决方案文件夹下面新建一个项目 一个单元测试项目 Product.Tests.
- Cocos2d-X之LUA注意事项
「使用计时器」: 计时器函数原型:unsigned int scheduleScriptFunc(unsigned int handler, float interval, bool paused) ...
- Windows Presentation Foundation (WPF)中的命令(Commands)简述
原文:Windows Presentation Foundation (WPF)中的命令(Commands)简述 ------------------------------------------- ...
- 数学概念的提出(一) —— 熵的定义式 H(x)=-log2(p(x))
h(x)=−log2p(x) 考虑一个离散型随机变量 x,当我们观测到该变量的一个特定值,问此时我们通过该值获得的关于该变量的信息量是多少? 信息量可视为"意外的程度"(degre ...
- 百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图
原文:百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liusaint1992/ ...
- BS学习概述
从最初的牛腩新闻公布系统,到如今的JS,回想一下,自己的BS也算是学了大半,可是有时候想起来还是总是有一种不踏实的感觉,一是由于从开学到如今赶上了三级考试,自考.软考,导致BS学习时间被大大压缩了,代 ...
- 【全面解禁!真正的Expression Blend实战开发技巧】第二章 你好,UI设计师
原文:[全面解禁!真正的Expression Blend实战开发技巧]第二章 你好,UI设计师 你好,UI设计师 曾几何时我从没想过要与艺术家打交道,但是Silverlight改变了这一切.UI设计师 ...
- 图像滤镜艺术--编码基础(Photoshop基础变换的代码实现)
原文:图像滤镜艺术--编码基础(Photoshop基础变换的代码实现) 自从上一篇博客写完之后,到现在已经有段时间了,这段时间不是不想接着写,只是想做的更好了在写出来给大家看呵呵. 今天,我将给大家介 ...
- 赵伟国:陆资无法进入台湾紫光要到WTO控告(芯片是为了经济安全,高通找的人不是很聪明)
集微网消息,昨天由全球半导体联盟和上海市集成电路行业协会联合举办的Memory +论坛在上海举行,会议透过来自存储器.逻辑和系统市场领先企业的高管,深入他们对未来存储器的应用.可行的商业模式,以及逻辑 ...
- C#匹配中文字符串的4种正则表达式分享
本文介绍在C#中使用匹配中文的正则表达式,包括纯中文.有中文.中文开头.中文结尾等几个正则表达式示例.在正则表达式中,中文可以通过Unicode编码来确定正则表达式范围. 在C#中,匹配中文的正则表达 ...