Flux reference
https://facebook.github.io/flux/docs/dispatcher.html#content
首先安装
npm install --save flux
Dispatcher
dispatcher 和 订阅发布模式(pub-sub systems)有两个不同点:
- 在有事件触发的时候,每个注册到dispatcher上的回调函数都会接收到,它们不是针对指定事件才回调
- 回调函数可以延迟执行,可以等到其他所有或部分回调函数执行后才执行
例子
演示第一个不同点:
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
Flux reference的更多相关文章
- 构建具有用户身份认证的 React + Flux 应用程序
原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 React + Flux 教程,文章主要介绍了 ...
- Spring Boot Reference Guide
Spring Boot Reference Guide Authors Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, ...
- React: 研究Flux设计模式
一.简介 一般来说,State管理在React中是一种最常用的实现机制,使用这种state管理系统基本可以开发各种需求的应用程序.然而,随着应用程序规模的不断扩张,原有的这种State管理系统就会暴露 ...
- ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0
ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...
- Flux 普及读本
话说当时做 APP 时,三月不知肉味,再次将眼光投放前端,有种天上一天,地下一年的感觉. Flux 是一种思想 了解的最好方式当然是看Flux官方文档了.React 中文站点也能找到对应的翻译版本,但 ...
- 【转】Django Model field reference学习总结
Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...
- (转) Qt 出现“undefined reference to `vtable for”原因总结
由于Qt本身实现的机制所限,我们在使用Qt制作某些软件程序的时候,会遇到各种各样这样那样的问题,而且很多是很难,或者根本找不到原因的,即使解决了问题,如果有人问你为什么,你只能回答--不知道. 今天我 ...
- undefined reference to `__android_log_print'
使用android studio 编写NDK代码时出现错误:undefined reference to `__android_log_print' 解决办法: eclipse andro ...
- CentOS 6.5 编译 PHP-7 报错:undefined reference to `libiconv_open 无法编译 PHP libiconv
./configure --with-mysql=/backup/mysql --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zli ...
随机推荐
- 洛谷 P1908 逆序对(树状数组解法)
归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
- day04 基本类型包装类
- [题解](约数)BZOJ_1053_反素数
三条引理:1.1~N中最大风反质数,就是1~N中约数个数最多的最小的一个 比较显然,是应该看出来的一条 2.1~N中任何数的不同因子都不会超过10个,且所有质因子的指数之和不超过30: 2*3*5*7 ...
- [CF1111D] Destory the Colony
Portal 大致题意: 给定一个偶数长度(\(n \leq 10 ^ 5\))的字符串, 只包含大小写字母. 有q(\(q \leq 10 ^ 5\))次询问, 每次指定两个位置, 要求通过交换字符 ...
- Codeforces Round #390 (Div. 2) D
All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...
- JAVA Debug调试技术
System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常,不过它和另外一个e.printStackTrace()方法不同.后者也是打印出异常,但是它还将显示出更深的调用 ...
- git(代码仓库)
第1章 git介绍 1.1 参数: 第2章 git管理一个项目 2.1 图示 2.2 cd /项目路径 2.3 git config --globle user.email "邮箱地址&q ...
- JDK原子类操作
JDK原子类操作及原理 在JDK5之后,JDK提供了对变量的原子类操作, java.util.concurrent.atomic里都是原子类 原子类的分类 原子更新基本类型 原子更新数组 原子更新抽象 ...
- nodejs Async 使用方法(解决多层回调嵌套)
由于nodejs是异步处理的,有时我们想同步从mysql里取出数据,最后在处理逻辑 就需要用到此扩展: 此扩展可以避免多层回调: 安装方法: npm install async 使用方法: 1.par ...
- linux学习-Linux系统启动过程
linux系统启动过程 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行init. 系统初始化. 建立终端 . 用户登录系统. 内核引导 电源开机后,首 ...