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();
_share(type = undefined) {
if (this.props.type === 'letter') {
DeviceEventEmitter.emit('_getSharePage', type); //全局注册分享事件
<Button
onPress={() => {
this._share('wechat')
title={分享到微信}
<Button
onPress={() => {
this._share('save')
title={下载海报}
import ViewShot, {captureRef} from "react-native-view-shot"; //将React Native视图捕获到图像。
import QRCode from 'react-native-qrcode-svg'; //将React Native图片生成二维码
import CameraRoll from "@react-native-community/cameraroll"; //这里需要pod很多个文件
import {check, PERMISSIONS, RESULTS} from 'react-native-permissions'; //获取手机权限
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);
<ViewShot ref="viewShot" >
<QRCode
value={Config.domain + '/web/register?invite_code=' + this.props.inviteCode}
size={168}
bgColor='#000'
fgColor='white'
</ViewShot>
componentDidMount(){
let self = this;
this.listener =DeviceEventEmitter.addListener('footerRefresh',function(func){
self.refreshTrade = func
componentWillUnmount(){
this.listener.remove();
//当触发上拉加载的时候
this.refreshTrade && this.refreshTrade()
getOrderList(clean = false,use = true) {
this.setState({loading: true});
Http.post('/api/v1/ok/spot/orders', {
pers: 10,
page: clean ? 1 : this.state.page + 1,
}).then(res => {
this.setState({loading: false});
if (res.status === 10000) {
//防止监听器一直触发,保持子页面在父页面只有一个监听器
if(use){
DeviceEventEmitter.emit('footerRefresh',res.has_next ? ()=>{this.getOrderList(false,false)} : ()=>{});
this.setState({
trade: clean ? res.data : this.state.trade.concat(res.data),
hasNext: res.has_next,
page: res.page,
}).catch(err => {
console.log(err);
Toast.message('通讯失败');