React 实践记录 02 Flux introduction

Introduction

本文组成:前端

  • React 官方文档翻译
  • 相关实践心得。

内容上是Flux的介绍,例子将会在之后写出。
一旦稍微多了解一点React,很难避免听到Flux这个名词。
Flux是一个Facebook团队的前端开发架构。借助单向数据流等其它机制,使得React能够发挥了更增强大的功能。比起其它的框架,Flux更像是一种模式,咱们能够投入较少的学习成本,快速上手Flux。react

Flux应用有三个主要的组成部分:调度者(dispatcher), 仓库(stores),视图(view)。view由React组件构成。不要将Flux应用视做MVC架构。的确,Controller在Flux应用中也是存在的,可是他们被称做controller-views,其实是最外层的React组件,用以从Store中获取数据,传送给子组件。架构

Flux使用单向数据绑定,每当用户与view交互时,view将会借助dispatcher传递action至各类存储应用数据与业务逻辑的store,对全部状态受到影响的react组件进行更新。框架

Structure and Data Flow

数据在Flux中的传递是单向的。
函数

上面这张图是Flux应用的最基本模型。各个节点都是独立的。不要将Action想的过于复杂,它们只是数据的传播包。学习

若是再考虑到客户端交互,这张图会变成下面这样,view会触发action,在应用中传播。
spa

全部的数据经由dispatcher这个中央节点传播。dispatcher收到action后,会调用store所注册过的相应回调函数。而store则会告知controller-views新的数据已到达,触发后者的event handler。后者取得新数据,借助React的setState,触发组件的重渲染。翻译

没有双向绑定的数据,全部的状态都在store中维护。可能各个sotre存在着依赖,但这种依赖由dispatcher管理,各模块良好解耦。3d

Dispatcher

dispatcher做为Flux应用数据传输的中央节点,实际上管理着store的各种callback注册,使得其能够在随后将action分发。
dispatcher还能够管理store之间的依赖,即,配置action到来时,按照必定的顺序调用已注册的callback。双向绑定

AppDispatcher.register(function(action) {
  var text;

  switch(action.actionType) {
    case TodoConstants.TODO_CREATE:
      text = action.text.trim();
      if (text !== '') {
        create(text);
        TodoStore.emitChange();
      }
      break;

    case TodoConstants.TODO_TOGGLE_COMPLETE_ALL:
      if (TodoStore.areAllComplete()) {
        updateAll({complete: false});
      } else {
        updateAll({complete: true});
      }
      TodoStore.emitChange();
      break;
       default:
      // no op
  }
});

Stores and Controller-Views

store包含了应用的状态与业务逻辑。它们的职责相似与MVC中的M。
store中的callback以action为参数。如以前的代码同样,根据不一样的action类型,处理不一样的业务。每当一个store更新,它都会以广播形式的事件,通知正在侦听的各种view。
React组件构成了view层,在view结构的最外层,即为侦听store广播的controller-view,每个独立的controller-view能够用于处理页面中一部分组件的状态。
当收到store传来的事件时,它首先借助store提供的getter方法,获取新的数据,接着经过setState()forceUpdate()来触发渲染。

本文结束。

相关文章
相关标签/搜索