简谈redux

Flux

耍了解 Redux,首先要从 Flux 说起,可以认为 Redux 是 Flux 思想的另 一 种实现方 式,通过了解 Flux,我们可以知道 Flux一族框架(其中就包括 Redux)贯彻的最重要的 观点一一单向数据流,更重要的是,我们可以发现 Flux框架的缺点,从而深刻地认识到 Redux 相对于 Flux 的改进之处 。让我们来看看 Flux 的历史,实际上, Flux是和React 同时面世的,在 2013 年, Face­book公司让 React亮相的同时,也推出了 Flux框架, React和 Flux相辅相成, Facebook认为两者结合在一起才能构建大型的 JavaScript应用 。做 一 个容易理解的对比, React是用来替换 jQuery 的,那么 Flux 就是以替换Backbone.js、 Ember.js 等 MVC 一族框架为目的 。

在 MVC ( Model-View-Controller)的世界里, React相当于 v (也就是 View)的部分,只涉及页面的渲染一旦涉及应用的数据管理部分,还是交给 Model 和 Controller,不过,Flux并不是 一 个 MVC 框架,事实上, Flux认为 MVC 框架存在很大问题,它推翻了MVC 框架, 并用一个新的思维来管理数据流转 。

首先先说一下什么是mvc框架

MVC 框架是业界广泛接受的一种前端应用框架类型,这种框架把应用分为三个部分:

model(模型) 负责管理数据,大部分业务逻辑也应该放在model中

view(视图)负责渲染用户界面,应该避免view中涉及业务逻辑

controller(控制器)负责接受用户的输入,根据用户的输入调用对应的model部分逻辑,把产生的数据结果交给view部分,让view渲染出必要的输出

关系图如下

扫描二维码关注公众号,回复: 980232 查看本文章

对于 MVC 框架,为了让数据流可控, Controller应该是中心,当 View 要传递消息 给 Model 时,应该调用 Controller 的方法,同样,当 Model 要更新 View 时,也应该通过 Controller 引发新的渲染 。

当Facebook推出Flux时,招致了很多质疑。 很多人都说, Flux只不过是一个对数 据流管理更加严格的 MVC 框架而已 。 这种说法不完全准确,但是 一定意义上也说明了 Flux 的一个特点:更严格的数据流控制 。

Facebook 已经无心在 MVC 框架上纠缠,他们用 Flux 框架来代替原有的 MVC 框架,他们提出的 Flux 框架大致结构是图 3-3 的模样 。 

一个 Flux 应用包含四个部分,我们先粗略了解一下:

Dispatcher,处理动作分发,维持 Store 之间的依赖关系; 

Store,负责存储数据和处理数据相关逻辑 ;

Action,驱动 Dispatcher 的 JavaScript 对象

View,视图部分,负责显示用户界面。 

如果非要把 Flux 和 MVC 做一个结构对比,那么, Flux 的 Dispatcher相当于 MVC 的 Controller, Flux 的 Store相当于 MVC 的 Model, Flux 的 View 当然就对应 MVC 的 View 了,至于多出来的这个 Action,可以理解为对应给 MVC 框架的用户请求 。

在 MVC 框架中,系统能够提供什么样的服务,通过 Controller暴露函数来实现 。 每增加 一个功能, Controller往往就要增加一个函数;在 Flux 的世界里,新增加功能 并不需要 Dispatcher增加新的函数,实际上, Dispatcher 自始至终只需要暴露一个函数 Dispatch, 当需要增加新的功能时,要做的是增加一种新的 Action类型, Dispatcher 的对 外接口并不用改变 。

当需要扩充应用所能处理的“请求”时, MVC 方法就需要增加新的 Controller,而 对于 Flux 则只是增加新的 Action。 

1. Dispatcher

首先,我们要创造一个 Dispatcher,几乎所有应用都只需要拥有 一 个 Dispatcher, 对于我们这个简单的应用更不例外 。 在 src/AppDispatcher. 中,我们创造这个唯 一 的 Dispatcher 对象,代码如下: 

import {Dispatcher} from 'flux';

export default new Dispatcher();

非常简单,我们引人 flux库中的 Dispatcher类,然后创造一个新的对象作为这个文 件的默认输出就足够了 。 在其他代码中,将会引用这个全局唯一的 Dispatcher对象。

Dispatcher存在的作用,就是用来派发 action,接下来我们就来定义应用中涉及的 action。 

 

猜你喜欢

转载自www.cnblogs.com/mawn/p/9072245.html