ReactNative之Flux框架的使用
概述
React Native 能够说非常火,非常多bat的项目都在使用。不用发版就能够解决一些问题,给程序猿带来了非常多福利。
研究了一下午,把Flux框架在Android中给执行了起来。分享给大家……
关于Flux框架,官方地址是 Flux,有兴趣的能够參考。
官方给出的关于Flux的解释例如以下:
Flux is the application architecture that Facebook uses for building client-side web applications. It complements React’s composable view components by utilizing a unidirectional data flow. It’s more of a pattern rather than a formal framework, and you can start using Flux immediately without a lot of new code.
翻译内容:
Flux是 Facebook 用于构建Web客户端应用程序的应用程序架构。它使用单向数据流来补充React的组合视图组件。与其说它是一个框架。不如说它是一种模式。你能够開始使用该框架,不用写一些新的代码。
流程图
Flux的流程图例如以下所看到的:

项目结构
開始搭建项目,项目的文件夹结构例如以下所看到的
View
export default class O2OActDetail extends Component {
// 构造函数
constructor(props) {
super(props);
}
render() {
return (<MyButtonController />);
}
}
Components
MyButtonController
export default class MyButtonController extends Component {
constructor(props) {
super(props);
this._onChange = this._onChange.bind(this);
this.state = {
items: ListStore.getAll()
}
}
componentDidMount() {
ListStore.addChangeListener(this._onChange);
}
componentWillUnmount() {
ListStore.removeChangeListener(this._onChange);
}
_onChange() {
var items = ListStore.getAll();
Util.log("MyButton=====>_onChange-->" + items.length)
this.setState({
items: ListStore.getAll()
});
}
render() {
return (<MyButton
items={this.state.items}
/>);
}
}
MyButton 显示的View
export default class MyButton extends Component {
// 构造函数
constructor(props) {
super(props);
this.createNewItem = this.createNewItem.bind(this);
var items = props.items;
Util.log("MyButton=====>items-->" + items.length)
}
createNewItem() {
ButtonActions.addNewItem('data');
}
render() {
var itemHtml = this.props.items.map(function (listItem, i) {
return listItem + i;
});
return (
<View>
<TouchableOpacity onPress={() => {
this.createNewItem()
}} activeOpacity={1.0}>
<View style={{
width: 100, height: 40, borderWidth: 1, borderRadius: 4,
borderColor: "#f35353", margin: 50, alignItems: "center"
}}>
<Text style={{alignItems: "center"}}>測试button</Text>
</View>
</TouchableOpacity>
<View style={{flexDirection: "row"}}>
<Text style={{fontSize: 34, marginLeft: 100}}>{itemHtml}</Text>
</View>
</View>);
}
}
actions
ButtonActions 事件操作
var ButtonActions = {
addNewItem (text) {
Util.log("MyButton=====>ButtonActions-->" + text)
AppDispatcher.dispatch({
actionType: 'ADD_NEW_ITEM',
text: text
});
},
};
module.exports = ButtonActions;
Dispatcher
AppDispatcher负责分发事件
/**
* Created by shenyiya on 2017/2/14.
*/
var ListStore = require('../../o2o/stores/ListStore');
var Dispatcher = require('flux').Dispatcher;
var AppDispatcher = new Dispatcher();
AppDispatcher.register((action) => {
switch (action.actionType) {
case 'ADD_NEW_ITEM':
ListStore.addNewItemHandler(action.text);
ListStore.emitChange();
break;
default:
// no op
}
});
module.exports = AppDispatcher;
Stores
ListStore负责处理数据
/**
* Created by shenyiya on 2017/2/14.
*/
var EventEmitter = require('events').EventEmitter;
var assign = require('object-assign');
var ListStore = assign({}, EventEmitter.prototype, {
items: [],
getAll: function () {
return this.items;
},
addNewItemHandler: function (text) {
this.items.push(text);
},
emitChange: function () {
this.emit('change');
},
addChangeListener: function(callback) {
this.on('change', callback);
},
removeChangeListener: function(callback) {
this.removeListener('change', callback);
}
});
module.exports = ListStore;
到这里位置。该项目的全部结构搭建完毕。
感谢
感谢 阮一峰 作者的博客《Flux 架构新手教程》指导 Flux 架构新手教程
假设大家有问题能够加入我的微信 shenyiya 一起讨论。
ReactNative之Flux框架的使用的更多相关文章
- ReactNative For Android 框架启动核心路径剖析
版权声明:本文由王少鸣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/144 来源:腾云阁 https://www.qclo ...
- redux+flux(一:入门篇)
React是facebook推出的js框架,React 本身只涉及UI层,如果搭建大型应用,必须搭配一个前端框架.也就是说,你至少要学两样东西,才能基本满足需要:React + 前端框架. Faceb ...
- Flux Demo解析
最近学习了阮一峰老师的博文 "Flux入门教程",博文中详细介绍了Flux框架和Controller view模式,并提供了Demo,受益匪浅. 现特参考阮老师的Demo,绘制了一 ...
- 第3章 从Flux到Redux
第3章 从Flux到Redux 3.1 Flux 单向数据流,React是用来替换Jquery的,Flux是以替换Backbone.js.Ember.js等MVC框架为主的. actionTypes. ...
- React: 研究Flux设计模式
一.简介 一般来说,State管理在React中是一种最常用的实现机制,使用这种state管理系统基本可以开发各种需求的应用程序.然而,随着应用程序规模的不断扩张,原有的这种State管理系统就会暴露 ...
- [技术博客]利用第三方框架react-native-swipeout实现左右滑动出现按钮
在之前的开发中,为了实现用户不同手势操作能够对应不同的功能,我们考虑使用React-Native的API--PanResponder,实现识别用户的手势,实现不同的功能.但我们很快就发现,这样简单的实 ...
- 一、Flux 是什么?
React 本身只涉及UI层,如果搭建大型应用,必须搭配一个前端框架.也就是说,你至少要学两样东西,才能基本满足需要:React + 前端框架. Facebook官方使用的是 Flux 框架.本文就介 ...
- reactNative性能优化
本文将简单介绍一下我所收集到的React Native应用优化方法,希望对你有所启发.很多方法也是适用React web应用的. 包体积优化 无论是热更新方案走网络下载js,还是直接将js打进apk, ...
- React的设计哲学 - 简单之美
React最初来自Facebook内部的广告系统项目,项目实施过程中前端开发遇到了巨大挑战,代码变得越来越臃肿且混乱不堪,难以维护.于是痛定思痛,他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的 ...
随机推荐
- TypeError: Cannot use 'in' operator to search for 'length' in....
前台页面读取商品属性是字符串形式,数据库中存储商品属性是集合形式,前台数据存入数据库中数据格式会自动转,后台数据回显到前台数据格式需要手动转换,否则会报异常 错误信息提示:
- 洛谷P3567 [POI2014]KUR-Couriers 主席树
挺裸的,没啥可讲的. 不带修改的主席树裸题 Code: #include<cstdio> #include<algorithm> using namespace std; co ...
- NodeJS学习笔记 (5)网络服务-http-req(ok)
原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: 概览 本文的重点会放在req这个对象上.前面已经提到,它其实是http.Incom ...
- linux 连接 NAS
[root@kvm-server ~]# mount -o username=user01,password=1234567890 //192.168.31.20/share /mnt/nas Cou ...
- Linux系统之间文件传输 scp 命令
个人使用记录 scp /home/liwm/Downloads/mysql-5.5.32-linux2.6-x86_64.tar.gz root@192.168.122.3:/home/oldboy/ ...
- C#打开或者创建一个文件,然后向其末尾写入数据的方法
原文:C#打开或者创建一个文件,然后向其末尾写入数据的方法 FileStream fs = new FileStream(@"d:\timetick.txt" ...
- 【BZOJ 1191】[HNOI2006]超级英雄Hero
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分图的最大匹配. 因为要答下一题,这一题必须先答完. 所以如果某道题没有匹配了. 那么就直接break掉. [代码] #inclu ...
- Android之输入内容监听回车键【Editor】
2.输入内容时按下回车键时监听 username.setOnEditorActionListener(new OnEditorActionListener() { @Override public b ...
- bzoj1010: [HNOI2008]玩具装箱toy(DP+斜率优化)
1010: [HNOI2008]玩具装箱toy 题目:传送门 题解: 很明显的一题动态规划... f[i]表示1~i的最小花费 那么方程也是显而易见的:f[i]=min(f[j]+(sum[i]-su ...
- spark 卡在spark context,运行出现spark Exception encountered while connecting to the server : javax.security.sasl.SaslException
原因: 使用root用户运行spark代码 解决方法:使用非管理员账户运行spark即可 [userone@localhost bin]$ ./add-user.sh What type of use ...