概述

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

  1. export default class O2OActDetail extends Component {
  2. // 构造函数
  3. constructor(props) {
  4. super(props);
  5. }
  6. render() {
  7. return (<MyButtonController />);
  8. }
  9. }

Components

MyButtonController

  1. export default class MyButtonController extends Component {
  2. constructor(props) {
  3. super(props);
  4. this._onChange = this._onChange.bind(this);
  5. this.state = {
  6. items: ListStore.getAll()
  7. }
  8. }
  9. componentDidMount() {
  10. ListStore.addChangeListener(this._onChange);
  11. }
  12. componentWillUnmount() {
  13. ListStore.removeChangeListener(this._onChange);
  14. }
  15. _onChange() {
  16. var items = ListStore.getAll();
  17. Util.log("MyButton=====>_onChange-->" + items.length)
  18. this.setState({
  19. items: ListStore.getAll()
  20. });
  21. }
  22. render() {
  23. return (<MyButton
  24. items={this.state.items}
  25. />);
  26. }
  27. }

MyButton 显示的View

  1. export default class MyButton extends Component {
  2. // 构造函数
  3. constructor(props) {
  4. super(props);
  5. this.createNewItem = this.createNewItem.bind(this);
  6. var items = props.items;
  7. Util.log("MyButton=====>items-->" + items.length)
  8. }
  9. createNewItem() {
  10. ButtonActions.addNewItem('data');
  11. }
  12. render() {
  13. var itemHtml = this.props.items.map(function (listItem, i) {
  14. return listItem + i;
  15. });
  16. return (
  17. <View>
  18. <TouchableOpacity onPress={() => {
  19. this.createNewItem()
  20. }} activeOpacity={1.0}>
  21. <View style={{
  22. width: 100, height: 40, borderWidth: 1, borderRadius: 4,
  23. borderColor: "#f35353", margin: 50, alignItems: "center"
  24. }}>
  25. <Text style={{alignItems: "center"}}>測试button</Text>
  26. </View>
  27. </TouchableOpacity>
  28. <View style={{flexDirection: "row"}}>
  29. <Text style={{fontSize: 34, marginLeft: 100}}>{itemHtml}</Text>
  30. </View>
  31. </View>);
  32. }
  33. }

actions

ButtonActions 事件操作

  1. var ButtonActions = {
  2. addNewItem (text) {
  3. Util.log("MyButton=====>ButtonActions-->" + text)
  4. AppDispatcher.dispatch({
  5. actionType: 'ADD_NEW_ITEM',
  6. text: text
  7. });
  8. },
  9. };
  10. module.exports = ButtonActions;

Dispatcher

AppDispatcher负责分发事件

  1. /**
  2. * Created by shenyiya on 2017/2/14.
  3. */
  4. var ListStore = require('../../o2o/stores/ListStore');
  5. var Dispatcher = require('flux').Dispatcher;
  6. var AppDispatcher = new Dispatcher();
  7. AppDispatcher.register((action) => {
  8. switch (action.actionType) {
  9. case 'ADD_NEW_ITEM':
  10. ListStore.addNewItemHandler(action.text);
  11. ListStore.emitChange();
  12. break;
  13. default:
  14. // no op
  15. }
  16. });
  17. module.exports = AppDispatcher;

Stores

ListStore负责处理数据

  1. /**
  2. * Created by shenyiya on 2017/2/14.
  3. */
  4. var EventEmitter = require('events').EventEmitter;
  5. var assign = require('object-assign');
  6. var ListStore = assign({}, EventEmitter.prototype, {
  7. items: [],
  8. getAll: function () {
  9. return this.items;
  10. },
  11. addNewItemHandler: function (text) {
  12. this.items.push(text);
  13. },
  14. emitChange: function () {
  15. this.emit('change');
  16. },
  17. addChangeListener: function(callback) {
  18. this.on('change', callback);
  19. },
  20. removeChangeListener: function(callback) {
  21. this.removeListener('change', callback);
  22. }
  23. });
  24. 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项目结合vux使用

    引入vux 1.直接安装或者更新: npm install vux --save 或者使用 yarn yarn add vux // 安装 yarn upgrade vux // 更新 2.vux2必 ...

  2. 网页里如何使用js禁用F12事件

    接上一篇,突然想起来,类似于网页里如何使用js禁用鼠标右击事件,还有禁用F12事件也可以禁用一下,总所周知,对于Web开发人员来说,常常要进行界面的调试.使用F12调试工具能够很方便地进行调试,查看h ...

  3. Linux学习总结(12)——Linux必须学会的60个命令

    Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等. 文件可以是一封信.一个通讯录,或者是程序的源语句.程序 ...

  4. 在Windows上面安装多个Memcached

    在Windows上面安装多个Memcached sc create "memcached Server3" start= auto binPath= "D:\memcac ...

  5. 【linux驱动分析】misc设备驱动

    misc设备驱动.又称混杂设备驱动. misc设备驱动共享一个设备驱动号MISC_MAJOR.它在include\linux\major.h中定义:         #define MISC_MAJO ...

  6. 上传canvas图片到服务器

    canvas绘图后用 canvasDom.toDataURL()可以得到png格式图片的base64 dataURI 然后用ajax post给后台  ,后端程序把开头的data:image/png; ...

  7. Metasploit的攻击实例讲解----ms10_046快捷方式图标漏洞

    不多说,直接上干货! 准备工具 1.Kali linux 2016.2(Rolling)系统  IP:  192.168.1.103 2.受害者机子(windows XP系统)   IP: 10.10 ...

  8. 2018年湘潭大学程序设计竞赛 maze(bfs)

    链接:https://www.nowcoder.com/acm/contest/105/F来源:牛客网 有q个单向传送阵,每个传送阵各有一个入口和一个出口,入口和出口都在迷宫的格子里,当走到或被传送到 ...

  9. 把ISO文件当作光盘挂载

    当不能挂载光盘或者U盘时候,只需要把ISO文件传到某个目录中,比如/data下,即可挂载,如下所示:   mount -o loop /data/rhel-server-6.3-x86_64-dvd. ...

  10. Zero-input latency scheduler: Scheduler Overhaul

    Scheduler Overhaul, with contributions from rbyers, sadrul, rjkroege, sievers, epenner, skyostil, br ...