主要讲解一下前端为何须要进行数据管理,有效的数据管理应该是什么样子的,最后挑选Flux、Redux、Vuex进行对比讲解。前端
组件式开发的核心思路是MVC,Model层的数据发生变化,驱动View层的视图发生变化。试想一个场景,若是ModelA触发ModelB变化,致使ViewB发生变化,ViewB发生变化时,触发了ModelC变化,ModelC又触发了其余Model的变化...,咱们想知道一个View的变化到底是那个数据致使的,追查起来就很困难,因而就记录数据的变化就颇有必要了,其实换一个高大上的名字就是数据状态管理。vue
1. 数据集中管理
view中的数据统一放置到一个仓库(store)中,要渲染页面的时候,从中取出当前状态的数据(state),而后将state中的最新的数据经过props传递到组件中,而后渲染组件,实现试图展示。git
2. 精细化拆解数据操做
要修改store中的state,为了作到数据的操做可追溯,尽可能将数据的操做拆解成一个个小函数,固然纯函数最好。github
3. 单向数据驱动
组件中不能直接修改state的值,修改state,只能发出修改请求(action),由action触发数据操做。vuex
总之,数据集中管理就须要应用使用惟一的数据Tree,存放在store中;精细化拆解数据操做就是须要提供小而纯的函数,来修改state;单就向数据驱动须要提供惟一能修改state的渠道。redux
Flux数据流的顺序是:
View发起Action->Action传递到Dispatcher->Dispatcher将通知Store->Store的状态改变通知View进行改变架构
ps:基于Flux架构思想写的一个小demo框架
Redux相对于Flux的改进:函数
把store和Dispatcher合并,结构更加简单清晰
新增state角色,表明每一个时间点store对应的值,对状态的管理更加明确
Redux数据流的顺序是:
View调用store.dispatch发起Action->store接受Action(action传入reducer函数,reducer函数返回一个新的state)->通知store.subscribe订阅的从新渲染函数
Vuex是专门为Vue设计的状态管理框架,
一样基于Flux架构,并吸取了Redux的优势
Vuex相对于Redux的不一样点有:
Vuex数据流的顺序是:
View调用store.commit提交对应的请求到Store中对应的mutation函数->store改变(vue检测到数据变化自动渲染)
ps:vuex官方Vue+vuex小demo
数据管理主要是方便SPA开发时,管理多个组件或子页面的公用数据,若是仅仅是简单个的单页,您最好不要使用Redux或Vuex。