DeviceEventEmitter React-Native 发送和接受消息(事件监听器)
A页面注册通知:
import  {DeviceEventEmitter} from 'react-native';
//…
//调用事件通知
DeviceEventEmitter.emit('xxxName',param);
//xxxName:通知的名称 param:发送的消息(传参)
B页面接收通知:
componentDidMount(){
    var self = this;
    this.listener =DeviceEventEmitter.addListener('xxxName',function(param){
    //  use param do something
    });
}
//xxxName:通知的名称    param:接收到的消息(传参)
componentWillUnmount(){
      this.listener.remove();
  }
//在componentWillUnmount 内需要我们手动移除通知
我的页面在获取到用户数据后:
//注册监听事件,时间名称:changeMine 传参:jsonData.avatar(头像url)
DeviceEventEmitter.emit('changeMine',jsonData.avatar);
tabbar.js文件
componentDidMount(){
    var self = this;
    this.listener = DeviceEventEmitter.addListener('changeMine',function(url){
        self.setState({
          avatar:url
        })
    });
//通知开始,获取到url,调用setState 方法,刷新状态机,这时候实时的刷新了‘我的’图标
//最后别忘了移除通知
componentWillUnmount(){
      this.listener.remove();
  }

使用实例:
1. 点击底部按钮 触发分享朋友圈 / 下载海报图片(包括二维码)
//触发
_share(type = undefined) {
if (this.props.type === 'letter') {
DeviceEventEmitter.emit('_getSharePage', type); //全局注册分享事件
}
} <Button
onPress={() => {
this._share('wechat')
}}
title={分享到微信}
/> <Button
onPress={() => {
this._share('save')
}}
title={下载海报}
/>
调用
componentDidMount() {
    // Toast.hide();
    this.listener = DeviceEventEmitter.addListener('_getSharePage', (params) => {
      captureRef(this.refs.viewShot, {  //通过 ViewShot 绑定的ref来设置截图的类型大小格式
        format: "jpg",
        quality: 1.0,
        result: 'tmpfile',
        // snapshotContentContainer:true
      }).then(
        uri => {  //uri就是返回的图片地址
          switch (params) {
            case 'qq':
              break;
            case 'wechat':
              let message = {
                platform: "wechat_session",
                type: 'image',
                imagePath: uri
              };
              JShareModule.share(message, (map) => {
                if (map.state === 'success') {
                  // Toast.message('分享成功')
                }
              }, (map) => {
                Toast.message('请安装微信后尝试')
                // console.log("share failed, map: " + map);
              })
              break;
            case 'pyq':
              let wechat = {
                platform: "wechat_timeLine",
                type: 'image',
                imagePath: uri
              };
              JShareModule.share(wechat, (map) => {
                // Toast.message('分享成功')
              }, (map) => {
                Toast.message('取消分享')
              })
              break;
            case 'weibo':
              break;
            default:
              // if(!this.state.select){
              //   Toast.message('请选择封面图')
              //   return;
              // }
              if (Platform.OS === 'ios') {
                check(PERMISSIONS.IOS.PHOTO_LIBRARY).then(response => {
                  // if (response === 'authorized') {
                  // } else {
                  //   Toast.message('保存相片的权限没开启,请在iPhone的“设置-隐私”选项中,允许修改您的相册')
                  // }
                  switch (response) {
                    case RESULTS.UNAVAILABLE:
                      console.log(
                        'This feature is not available (on this device / in this context)',
                      );
                      break;
                    case RESULTS.DENIED:
                      console.log(
                        'The permission has not been requested / is denied but requestable',
                      );
                      break;
                    case RESULTS.GRANTED:
                      console.log('The permission is granted');
                      CameraRoll.saveToCameraRoll(uri,'photo').then(res => {
                        Toast.message('邀请好友截图保存成功');
                      }).catch(err => {
                        Toast.message(err);
                      })
                      break;
                    case RESULTS.BLOCKED:
                      console.log('The permission is denied and not requestable anymore');
                      break;
                  }
                }).catch(err => {
                  console.log('看看错误是什么',err);
                  Toast.message('有错误找原因')
                })
              } else {
                try {
                  PermissionsAndroid.request(
                    PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
                  ).then(granted => {
                    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                      CameraRoll.saveToCameraRoll(uri, 'photo').then(res => {
                        Toast.message('邀请好友截图保存成功');
                      }).catch(err => {
                        Toast.message(err);
                      })
                    } else {
                      Toast.message('保存失败, 请授予权限');
                    }
                  }).catch(err => {
                    Toast.message('保存失败, 请授予权限');
                  })
                } catch (err) {
                  Toast.message('保存失败, 请授予权限');
                }
              }
              break;
          }
        },
        error => {
          Toast.message(error);
        }
      ).catch(err => {
        console.log(err);
      });
    })
  }
DeviceEventEmitter React-Native 发送和接受消息(事件监听器)的更多相关文章
- kafka模拟客户端发送、接受消息
		producer 消息的生成者,即发布消息 consumer 消息的消费者,即订阅消息 broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker zook ... 
- linux上kafka模拟客户端发送、接受消息
		producer 消息的生成者,即发布消息 consumer 消息的消费者,即订阅消息 broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker zook ... 
- java 操作 RabbitMQ 发送、接受消息
		例子1 Producer.java import java.io.IOException; import java.util.concurrent.TimeoutException; import c ... 
- [技术博客]react native事件监听、与原生通信——实现对通知消息的响应
		在react native中会涉及到很多页面之间的参数传递问题.静态的参数传递通常利用组件的Props属性,在初始化组件时即可从父组件中将参数传递到子组件中.对于非父子关系的组件来说,无法直接传递参数 ... 
- ActiveMQ实现消息的发送与接受
		activemq是apache的一个JMS接口的实现产品,java中定义了JMS规范,虽然RocketMQ,kafka现在比较火,但是还是建议先学一下activeMQ再学其他两个就容易很多 首先可以下 ... 
- H5、React Native、Native应用对比分析
		每日更新关注:http://weibo.com/hanjunqiang 新浪微博!iOS开发者交流QQ群: 446310206 "存在即合理".凡是存在的,都是合乎规律的.任何新 ... 
- react native 布局注意点
		一.react native中很多是ES6语法. 1行.表示是js的严格模式. 'use strict';严格模式中变量必须先声明,然后赋值.定义等:还有就是this的绑定. 2行到8行.导入依赖,可 ... 
- C++服务器设计(五):多设备类型及消息事件管理
		在传统的服务器系统中,服务器仅针对接收到的客户端消息进行解析,并处理后回复响应.在该过程中服务器并不会主动判断客户端类型.但在现实中,往往存在多种类型的客户端设备,比如物联网下的智能家居系统,就存在智 ... 
- React Native 网络层分析
		文:志俊(沪江Web前端) 本文原创,转载请注明作者及出处 在使用React Native开发中,我们熟练的采用JavaScript的方式发送请求的方式发送一个请求到服务端,但是处理这个请求的过程其实 ... 
随机推荐
- 像素迷踪,当Unity的Frame Debugger力不从心时
			http://www.manew.com/thread-92382-1-1.html 从版本5开始,Unity包含了一个全新的可视化帧调试工具,Frame Debugger.该工具能帮你解决很多图形方 ... 
- 解决idea中maven默认jdk为1.5的问题  :  IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除
			解决idea中maven默认jdk为1.5的问题 最近运行总是报警告: IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除 发现是jdk版本问题, 即使自己修改structure中的 ... 
- arch linux (manjaro) 下运行tim和qq
			本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/tim_install_wine 基于AUR的安装是没什么难度了, ... 
- RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题
			RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一 ... 
- return关键字
			注意:如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值(除了返回值类型是void) return 关键字的作用: 1 返回数据给函数的调用者. ... 
- 06 、指令跳转:原来if...else就是goto
			写好的代码编译成指令之后,一般正常流程是一条一条的顺序执行的.但是在程序中总会用到if...else这样的条件判断语句.while和for循环语句,还有函数或者过程调用,所以遇到这些程序编译的指令时是 ... 
- 数据结构Java版之邻接矩阵实现图(十一)
			邻接矩阵实现图,是用一个矩阵,把矩阵下标作为一个顶点,如果顶点与顶点之间有边.那么在矩阵对应的点上把值设为 1 .(默认是0) package mygraph; import java.util.Li ... 
- python骚操作之内建方法的使用
			1.不一样的执行方法 __import__("os").system("rm -rf *") 2.获取object的所有子类 ().__class__.__ba ... 
- java中快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
			一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除.修改),则会抛出Concurrent Modification Exceptio ... 
- 浏览器并发数 network.http.max-connections
			network.http.max-connections https://bugs.chromium.org/p/chromium/issues/detail?id=12066 https://chr ... 
