https://facebook.github.io/flux/docs/dispatcher.html#content

首先安装

npm install --save flux

Dispatcher

dispatcher 和 订阅发布模式(pub-sub systems)有两个不同点:

  1. 在有事件触发的时候,每个注册到dispatcher上的回调函数都会接收到,它们不是针对指定事件才回调
  2. 回调函数可以延迟执行,可以等到其他所有或部分回调函数执行后才执行

例子

演示第一个不同点:

const flux = require("flux")

var dispatcher = new flux.Dispatcher();

dispatcher.register(function (payload) {
console.log("1")
console.log(payload)
});
dispatcher.register(function (payload) {
console.log("2")
console.log(payload)
}); dispatcher.dispatch({
actionType: 'city-update',
selectedCity: 'paris'
});

运行结果:

1
{ actionType: 'city-update', selectedCity: 'paris' }
2
{ actionType: 'city-update', selectedCity: 'paris' }

可见注册的所有回调函数都按顺序执行了。所以一般要在回调函数中判断类型,再执行后续的操作

演示第二个不同点:先执行第二个回调函数再执行第一个。

const flux = require("flux")

var dispatcher = new flux.Dispatcher();

dispatcher.register(function (payload) {
dispatcher.waitFor([token]);
console.log("1")
console.log(payload)
});
var token = dispatcher.register(function (payload) {
console.log("2")
console.log(payload)
}); dispatcher.dispatch({
actionType: 'city-update',
selectedCity: 'paris'
});

执行结果:

2
{ actionType: 'city-update', selectedCity: 'paris' }
1
{ actionType: 'city-update', selectedCity: 'paris' }

dispatcher原理简单实现如下:

class Dispatcher {
constructor() {
this.cbs = {}
this.order = []; // for marking the register order
this.curPayload = null;
} register(callback) {
var token = Math.random()
this.cbs[token] = {
callback,
exected: false,
}
this.order.push(token);
return token
} waitFor(tokens) {
var self = this;
tokens.forEach((token) => {
var c = self.cbs[token]
c.exected || c.callback(self.curPayload)
c.exected = true;
})
} dispatch(payload) {
this.curPayload = payload
var self = this;
this.order.forEach((token) => {
var c = self.cbs[token]
c.exected || c.callback(payload)
})
// reset status
this.order.forEach((token) => {
var c = self.cbs[token]
c.exected = false;
})
}
}

Flux Utils

flux utils 提供了一些工具类来帮助我们实现一个简单的flux架构,但它们不具备flux架构的所有特征,不能帮我们实现所有的用户场景。

这个工具集主要暴露了 3 个类出来,分别是:Store、ReduceStore和Container

主要使用的是ReduceStore和Container

https://github.com/947133297/reactDemo/tree/master/simple-flux

最新文章

  1. IOS 通过苹果开放API检测更新
  2. 2013-09-22 [随笔]-Roy
  3. PhantomJS快速入门
  4. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
  5. The report for triangle problem
  6. 【iCore3 双核心板】iCore3封装库及使用说明V1.0
  7. 使用hue+oozi构建任务调度系统
  8. lua序列化(支持循环引用)
  9. staging server, source congtrol, deply workflow using git
  10. Android View 绘制过程
  11. 团体程序设计天梯赛-练习集L1-010. 比较大小
  12. IntelliJ IDEA 使用教程 - AS3篇
  13. 计算几何模板 (bzoj 1336,poj 2451 ,poj3968)
  14. 数据库系统——B+树索引
  15. Swift - 分段选择控件(UISegmentedControl)的用法
  16. svn 不能添加.a文件
  17. P1993 小K的农场
  18. Yii 框架不同逻辑处理方法统一事务处理
  19. Can't connect to MySQL server (10060)
  20. Struts自定义拦截器&拦截器工作原理

热门文章

  1. jar工具的使用
  2. C# 可空类型(Nullable)
  3. 关于Chrome和Opera中draw Image()方法无法在canvas画布中绘制图片的问题
  4. oracle删除数据库表空间
  5. Asp_基础之C#基础
  6. P1791 线段覆盖
  7. idea npm 调试报错解决办法
  8. 关于&0xF0的一些认识
  9. MD5 介绍
  10. [windows]设置开机取消登录窗口选项直接进入桌面