1、Flux概述
Flux是Facebook用来构建用户端的Web前端应用程序的体系架构,与其它形式化的框架相比,它更像是一个架构思想,用于管理和控制应用中数据的流向。这里应用中的数据指包括但不限于来自服务端的数据页面中view的一些状态(如一个面板是展开仍是关闭),临时存储在本地须要持久化到服务端的数据等。css
好了,说了这么多好像仍是一脸懵逼,不慌,接下来看看展开式。html
2、MVC
在讲述Flux以前,咱们看看以前传统的MVC架构以及在web前端中的一些问题继而思考Flux带来的改变。MVC(Model-View-Controller)最早兴起于后端,经过对应用程序复杂度的简化使程序更加直观和便于维护。后端程序MVC中View能够看为数据的呈现,Model为数据的模型,Controller做为程序的流程控制。前端
如今假设有这样的场景,用户想查看本身的profile页面,可能会有这样的流程:在页面上点击profile按钮,接下来就是一个HTTP请求(/profile?username=jiavan) => Controller接收到这一请求并得到请求的内容username=jiavan而后告知Model须要jiavan的数据 => Model返回了jiavan的数据 => Controller获得数据返回新的视图,看下流程:html5
如今前端中又有这样的场景:切换Menu中的Item,当前选中的Item颜色不一样于其它颜色而且底部显示对应Item的内容。web
通常状况下咱们会定义一个css class来做为当前选中Item的样式。当用户点击Item_A为被点击的元素新增高亮的class,其它兄弟元素移除该样式,这里的事件响应函数就是Controller,咱们会在这里处理样式修改逻辑,以及更新Model的数据,而后新的数据及样式从新渲染界面。后端
这种VC<->M的形式在关系比较简单的状况下是比较清晰容易控制的,可是复杂的页面上这样的模式可能会变得很是混乱:架构
之因此变得混乱了,由于不少view都具有修改多个model的能力,这里的单个修改行为能够称之为一个Action,一个Action的产生多是用户行为,或者一个Ajax请求须要渲染新界面。对比上面后端传统MVC模式能够发现:
后端中Action做为一个URL请求,前端中多是一个事件;
后端中Action处理被集中在Controller中,而前端中是分散的。
那么是否是能够把前端中修改状态即state的行为(事件回调/Ajax)所有抽象成一种Action描述,而后交付到一处即Reducers来进行原子化处理,而后Reducer修改整个应用中惟一的一棵state tree即Store,最后经过state->view的机制来从新渲染?框架
3、Flux数据流框架
上面提到的几个概念已经对Flux有了初步的了解,下面进入正题。相信有了解Flux的都应该看过下面这张著名的数据流图:函数
Action能够当作是修改Store的行为抽象;
Dispatcher管理着应用的数据流,能够看为Action到Store的分发器;
Store管理着整个应用的状态和逻辑,相似MVC中的Model。
因此Flux能够被看做传统MVC的改进而非颠覆。spa