react及flux架构范例Todomvc分析

时间:2015-05-29 20:01:54   收藏:0   阅读:2793

react及flux架构范例Todomvc分析

通过分析flux-todomvc源码,学习如何通过react构建web程序,了解编写react应用程序的一般步骤,同时掌握Flux的单向数据流动架构思想

关于react

react一个最吸引我的特性是组件,它是模块化的,所有的组件是独立的,又可以通过嵌套来构建更大型的组件,一个个小组件经过层层组装,最终形成web应用程序,它让我开始重新思考如何去构建大型的web应用程序。

关于Flux

Flux是一个思想而非框架,强调数据自上而下传递的单向流动理念,已经有很多种实现,比较有名气的是RefluxJs。单向流动让数据走向更清晰:用户UI交互触发事件,事件回调执行Action,并将所有的变化数据作为参数payload传递进去,各种Stores从payload中取出自己所需的数据进行更新,最终重新渲染发生变化的DOM结点。

分析

以下简要分析 react + flux 实现的todomvc源码,主要研究其构建方式与单向数据流动思想,对具体代码编写不做深入分析。

TodoApp组件

Store只在顶级的组件中接入,子组件通过prop层层传递,所有子组件不直接从Store里检索数据,这是一种很好的设计方式,有助降低数据耦合度。

Header组件

Header组件统一管理_onSave方法,该方法将提供给子组件调用。

MainSection组件

Footer组件

TodoItem组件

TodoTextInput组件

TodoTextInput组件仅依赖于父级通过prop传递下来的数据与方法,不直接与ActionStore进行操作

TodoActions

AppDispatcher

AppDispatcher既分发actions,又是actions的接收者,在接到actions后负责调用先前注册的Action管理回调方法。

Action管理回调方法中根据actionType来完成不同的操作,并在操作结束时触发TodoStore绑定的事件。

TodoStore

总结

react组件通过用户UI交互触发event,event回调函数被执行,在这些函数中调用Action对象对应的方法,发出action,事件分发器接收到action后,做出相应处理,然后触发Store改变事件,通过setState重新渲染DOM元素。

以TodoMVC为例,分两个阶段完成该应用程序的设计。

初始化阶段:

  1. 构建顶级组件及子组件;
  2. 获取Stroe数据,逐级提供到子组件上;
  3. Store绑定change事件,发生变化时,更新组件的数据;
  4. 子组件绑定各类事件,响应用户操作;
  5. 事件分发器注册一个接收到action时的事件处理回调函数;

交互阶段(以新增一个todo项为例):

  1. 在子组件上触发DOM事件,执行回调函数;
  2. 回调函数中调用Action方法;
  3. Action调用事件分发器,发出一个action;
  4. action中的数据被事件分发器传递给初始化阶段注册的事件处理回调函数;
  5. 事件处理回调函数根据不同的actionType进行处理;
  6. 如在处理中涉及数据变化,则手动触发初始化阶段Store绑定的change事件;
  7. Store接收到事件后,重新检索出所有数据提供给顶级组件的setState方法;
  8. 顶级组件自动调用render方法,重新渲染UI界面。

交互阶段的数据环

Event --> Action --> Dispatcher(携带数据) --> Store --> View --> Event

Flux主要包括三部分:Dispatcher、Store和Views(React组件),与传统的MVC(model-View-Controller)不同。Flux中的Dispatcher以controller-view的形式存在,所有数据操作都在Dispatcher的回调中进行,并反映到View上。view通常处于应用的顶层,它从Stores中获取数据,同时将这些数据传递给它的后代节点。


参考资料

Fork Me On Github

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!