博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flux 框架理解
阅读量:6225 次
发布时间:2019-06-21

本文共 3479 字,大约阅读时间需要 11 分钟。

hot3.png

flux 框架理解

在 flux 框架里面,主要有的概念有 view,store,dispatcher,action

一般的实现是


action -> dispatcher->store->view

同时,也会存在 由view 出发 action 的事情,这个时候,实现路线就是


view-action-> dispatcher -> store -> view

代码结构

js -    actions        - // 行为        xxActionCreator.js    components        - // react 组件         xxx.react.js    constants        - // 常量        xxxConstants.js    dispatcher        - // 分发器        xxDispatcher.js    stores        - // 存储        xxxStore.js    utils        - // 工具类           xxxUtil.js    app.js

对于 dispatcher 层职责理解

dispatcher is userd to broadcast payloads to registered callbacks,This is different from generic pub-sub systems in two ways:

  • callbacks are not subscribed to particular events,every payload is diapatched to every registred callback;

  • callbacks can be deferred in whole or part until other callbacks have been executed.

提供的api

register(function callback): registers a callback to be invoked with every dispatched payload,returns a token that can be used with waitFor()unregister(string id): removes a callback based on its tokenwaitFor(array ids): waits for the callbacks specified to be invoked before continuing executin of the current callback,this method should only be used by a callback in response to a dispatched payload. dispatch(object payload): dispatches a payload to all registerd callbacksisDispatching(): is this dispatcher currently dispatching.

主要的方法 有 register 和 dispatch 两个方法。

对于 view 层的职责理解

  • view层不能直接修改 store层的数据,必须是view层出发一个action,然后出发dispatcher,触发store层的数据修改,然后同时刷新view 层的展示效果。

  • view层 完全是作为 store 层的数据显示,同时提供一些交互事件,使用方通过这些交互事件触发action->dispatch->store 出发 数据的修改,然后根据view层绑定的数据,更新view 的页面。

对于 store 层的职责理解

  • store 层主要做的是存储数据,然后通过注册dispatcher.register() 方法。
  • 一般需要在store 层中集成 EventEmitter 事件,提供 emit,removeListener 和 on 方法,和 view 层 连接起来。

对于 view 层如何与 store 层组合在一起工作的

在view 层里面,主要是引入到store 层的数据,并且监听事件变化。

// ThreadSection.js// componentDidMount: function() {    //  监听 store 中数据变更,然后出发 onchange 事件。    ThreadStore.addChangeListener(this._onChange);        UnreadThreadStore.addChangeListener(this._onChange);  }      // threadStore.js    /**    * @param {function} callback   */  addChangeListener: function(callback) {    this.on(CHANGE_EVENT, callback);  },

然后在出发用户操作事件的时候,触发事件。

emitChange: function() {    this.emit(CHANGE_EVENT);  }

这个时候 on 方法监听的事件就会被执行,就会导致, ThreadSection.js 里面就会执行 this._onChage 方法。

然后在 this._onChange 方法里面执行的是:

/**   * Event handler for 'change' events coming from the stores   */  _onChange: function() {    // 更新 state    this.setState(getStateFromStores());  }

重新拉去数据去了。(好暴力的处理方式)

对于 action 层职责理解

对于 action 层,主要是被view 层调用使用的,然后在里面执行 dispatcher.dispatch 方法,来调用store 里面的方法,触发 store 里面的数据变化。

所以说: action 层只是单纯的方法提供者,提供一个桥梁。

对于 dispatcher 层职责理解

在一个 app 里面,有仅有一个 dispatcher ,负责统一的事件的 register 和 dispatch

// AppDispatcher.jsvar Dispatcher = require('flux').Dispatcher;module.exports = new Dispatcher();

对于 register 方法,主要是给 store 使用的,在store 里面调用方法

// Store.js        var AppDispatcher = require('./xxxxx');            AppDispatcher.register(function(action){        switch (action.actionType){                    case 'pppp':                xxx            break;                            }    })

对于 dispatch 方法,主要是给 action 调用的,在action 里面调用方法

// action.js  var AppDispatcher = require('./xxxxx');    var Actions = {     xxx:function(){        AppDispatcher.dispatch({            action:'pppp',            // 下面是参数            id:id        })    } }  module.exports = Actions;

转载于:https://my.oschina.net/bosscheng/blog/745722

你可能感兴趣的文章
179. Largest Number
查看>>
Git命令行大全
查看>>
Node.js 4493图片批量下载爬虫1.00
查看>>
其实人缺乏对数据的真实分析能力,只知道数据展现和推演
查看>>
连接H3C交换机的Console口连不上
查看>>
Redis 简介
查看>>
JSt中对象的prototype属性
查看>>
iPhone应用程序 将图片保存到相册实例
查看>>
给DropDownList添加ToolTip(title)属性
查看>>
IOS新特性详情
查看>>
redis性能测试
查看>>
浅谈mysql的两阶段提交协议
查看>>
《影响力》 一个活生生的例子(转载)
查看>>
程序员有趣的面试智力题(转)
查看>>
分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控
查看>>
phpstorm中完成一键快速注释函数头
查看>>
VMware公司SpringSource部门宣布收购Gemstone Systems公司
查看>>
Linux Start Restart and Stop The Cron or Crond Service
查看>>
2014第12周四开发记
查看>>
[转]Spring MVC之@RequestMapping 详解
查看>>