美文网首页
[RN库] React Native DeviceEventEm

[RN库] React Native DeviceEventEm

作者: hcq666 | 来源:发表于2019-04-28 09:44 被阅读0次

实现

DeviceEventEmitter在RN内的发送和接受消息。例如:

A页面注册通知:

import {DeviceEventEmitter} from'react-native';

//…

//调用事件通知

DeviceEventEmitter.emit('xxxName’,param);

//xxxName:通知的名称 param:发送的消息(传参)

B页面接收通知:

componentDidMount(){

varself =this;

this.listener =DeviceEventEmitter.addListener('xxxName',function(param){

// use param do something

});

}

//xxxName:通知的名称 param:接收到的消息(传参)

componentWillUnmount(){

this.listener.remove();

}

//在componentWillUnmount 内需要我们手动移除通知

知道DeviceEventEmitter的简单使用后

我的页面在获取到用户数据后:

//注册监听事件,时间名称:changeMine 传参:jsonData.avatar(头像url)

DeviceEventEmitter.emit('changeMine',jsonData.avatar);

tabbar.js 文件:

componentDidMount(){

varself =this;

this.listener = DeviceEventEmitter.addListener('changeMine',function(url){

self.setState({

avatar:url

})

});

//通知开始,获取到url,调用setState 方法,刷新状态机,这时候实时的刷新了‘我的’图标

//最后别忘了移除通知

componentWillUnmount(){

this.listener.remove();

}

js 向 js 发送数据

DeviceEventEmitter.emit('自定义名称',发送数据);

例:边看边买退出登录之后,我的淘宝和详情页的钱包数据应该改变。这时,我们可以在退出登录请求返回退出登录成功时发送一个通知

userInfo.userLogout((success) => {

if (success) {

DeviceEventEmitter.emit('taobaoBind',{taobaoBind:false,walletSum:0.00,couponNum:0});

const nav = this.props.navigator;

const routers = nav.getCurrentRoutes();

if (routers.length > 1) {

nav.pop();

}

}

});

然后在我的淘宝和详情页接收通知,并使用setState改变数据

DeviceEventEmitter.addListener('taobaoBind',(events) =>{this.setState({walletSum : events.walletSum});});

js接受数据

DeviceEventEmitter.addListener('名称',(events) ={使用数据events});

android向js发送数据

WritableMap params = Arguments.createMap();

params.putString("message",msg.obj.toString());

reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)

.emit(eventName, params);

例:扫码轮询时,扫码成功可以向扫码页发送一个扫码成功的状态,输入密码完成时,也可以发送一个状态,使扫码页自动关闭。并将用户信息发给我的淘宝,详情页等。

相关文章

网友评论

      本文标题:[RN库] React Native DeviceEventEm

      本文链接:https://www.haomeiwen.com/subject/meqlnqtx.html