概述

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. 关于Vue中父子组件相互传值

    Header为子组件,Home为父组件,通过子组件调用父组件 运行结果如下 下面是父组件调用子组件的案例 通过button按钮的click事件 图一是父组件Home中的run方法,图二是msg和fun ...

  2. [BZOJ3673&3674]可持久化并查集&加强版

    题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...

  3. malloc 和free例程

    #include <stdio.h>#include <stdlib.h>int main(){int a;scanf("%d",&a);int * ...

  4. 【Henu ACM Round#24 C】Quiz

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是这样 先放k-1个,然后空1个,然后再放k-1个.然后再空1个.. 以此类推. 然后如果(n/k)*(k-1)+n%k> ...

  5. Mysql学习总结(29)——MySQL中CHAR和VARCHAR

    MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要 ...

  6. hdoj Let the Balloon Rise

     /*Let the Balloon Rise Problem Description Contest time again! How excited it is to see balloons ...

  7. cocos2d_android 第一个游戏

    依据上一篇文章.创建好cocos2d--android的开发环境 先上效果图 实现该效果的代码: package com.cn.firstgame; import org.cocos2d.layers ...

  8. 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件

    首先.实现这一切的大前提是.你的AVD安卓模拟器,在启动之前.有设置好sdcard的大小,例如以下图.同一时候,你的AVD安卓模拟器,要处于启动状态.否则无法运行例如以下的操作. 这里以<[An ...

  9. When you are old (当你老了)

    - William Butler Yeats --威廉·巴特勒·叶芝 When you are old and grey and full of sleep: 当你老了,头发花白,睡意沉沉. And ...

  10. HDU 3016 Man Down(线段树)

    HDU 3016 Man Down 题目链接 题意:是男人就下100层的游戏的简单版,每次仅仅能从两端下落.求落地最大血量 思路:利用线段树能够处理出每一个线段能来自哪几个线段.然后就是dag最长路了 ...