概述

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框架的使用的更多相关文章

  1. ReactNative For Android 框架启动核心路径剖析

    版权声明:本文由王少鸣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/144 来源:腾云阁 https://www.qclo ...

  2. redux+flux(一:入门篇)

    React是facebook推出的js框架,React 本身只涉及UI层,如果搭建大型应用,必须搭配一个前端框架.也就是说,你至少要学两样东西,才能基本满足需要:React + 前端框架. Faceb ...

  3. Flux Demo解析

    最近学习了阮一峰老师的博文 "Flux入门教程",博文中详细介绍了Flux框架和Controller view模式,并提供了Demo,受益匪浅. 现特参考阮老师的Demo,绘制了一 ...

  4. 第3章 从Flux到Redux

    第3章 从Flux到Redux 3.1 Flux 单向数据流,React是用来替换Jquery的,Flux是以替换Backbone.js.Ember.js等MVC框架为主的. actionTypes. ...

  5. React: 研究Flux设计模式

    一.简介 一般来说,State管理在React中是一种最常用的实现机制,使用这种state管理系统基本可以开发各种需求的应用程序.然而,随着应用程序规模的不断扩张,原有的这种State管理系统就会暴露 ...

  6. [技术博客]利用第三方框架react-native-swipeout实现左右滑动出现按钮

    在之前的开发中,为了实现用户不同手势操作能够对应不同的功能,我们考虑使用React-Native的API--PanResponder,实现识别用户的手势,实现不同的功能.但我们很快就发现,这样简单的实 ...

  7. 一、Flux 是什么?

    React 本身只涉及UI层,如果搭建大型应用,必须搭配一个前端框架.也就是说,你至少要学两样东西,才能基本满足需要:React + 前端框架. Facebook官方使用的是 Flux 框架.本文就介 ...

  8. reactNative性能优化

    本文将简单介绍一下我所收集到的React Native应用优化方法,希望对你有所启发.很多方法也是适用React web应用的. 包体积优化 无论是热更新方案走网络下载js,还是直接将js打进apk, ...

  9. React的设计哲学 - 简单之美

    React最初来自Facebook内部的广告系统项目,项目实施过程中前端开发遇到了巨大挑战,代码变得越来越臃肿且混乱不堪,难以维护.于是痛定思痛,他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的 ...

随机推荐

  1. 【模板】扩展中国剩余定理(EXCRT)

    扩展中国剩余定理,是求解形如:$x\equiv a_{1}($ mod $b_{1})$$x\equiv a_{2}($ mod $b_{2})$$x\equiv a_{3}($ mod $b_{3} ...

  2. BZOJ 2938 [POI2000]病毒 (剪枝/A*迭代搜索)

    LOJ BZOJ 题目大意:给你一些模式串,问是否存在一个无限长的文本串,不包含任何一个给定的模式串 并没有想到去模拟合法的文本串在模式串的Trie图上匹配的过程..我好菜啊 如果一个字符串合法,那么 ...

  3. AES对称加密util

    package cn.com.qmhd.oto.common; import java.security.Key; import java.security.NoSuchAlgorithmExcept ...

  4. Linux ping 不通 域名 添加DNS

    修改路由配置文件 vi /etc/resolv.conf # Generated by NetworkManager #NDS nameserver 192.168.32.2 redhat7 系统优化 ...

  5. PHP中比较有用的几个函数

    php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确. highlight_string 当你想要把PHP代码显示到页面上时,highlight_string()函数就 ...

  6. Git学习总结(7)——Git GUI学习教程

    前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并 ...

  7. mysql-安全管理

    一.管理用户 用户账号和信息存放在数据库中 use mysql; select user form user; mysql数据库中包含一个user的表,它包含所有用户账号. user表中右移个名为us ...

  8. Crytek的幕后花絮

    无论是哪种公司规模和状态.Xsolla都能够为其提供定制化的服务.我们提供定制化的技术集成,而不是提供一系列的解决方式.由于我们致力于满足每个合作伙伴的需求.整套的解决方式还存在着一系列的潜在隐患,我 ...

  9. hdoj 1719 Friend

    Friend Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. BZOJ 3680 模拟退火

    思路: 退火就好了-- 1.强烈建议题目名称改为"吊打出题人" 2.这种题放oj上啥心态...-–hzwer 二分TLE和WA 终于AC了-- //By SiriusRen #in ...