React Native 使用DeviceEventEmitter实现事件监听和触发
业务场景:
在子页面或者同级页面进行了操作,组件之间联系很弱,这时可以用DeviceEventEmitter来实现事件监听
增加监听事件:
componentDidMount() {
this.updataFetchEmitter = DeviceEventEmitter.addListener(
'fetchEmitter', () => {
this.fetchData();
},
);
}
componentWillUnmount() {
const removeEvent = eee => eee && eee.remove();
removeEvent(this.updataFetchEmitter);
}
触发监听事件:
whenFinished() {
DeviceEventEmitter.emit('fetchEmitter');
}
完整代码 — PageA:
import React, { Component } from 'react';
import { View, Text,TouchableOpacity,DeviceEventEmitter } from 'react-native';
import { Navigation } from 'react-native-navigation';
export default class PageA extends Component {
componentDidMount() {
this.updataFetchEmitter = DeviceEventEmitter.addListener(
'fetchEmitter', () => {
Alert.alert(
'提示',
'这是从另一个纬度传来的消息,不要回复x3',
[
{text:'回复',onPress: ()=> console.log('回复') },
{text:'回复',onPress: ()=> console.log('回复') },
],
);
},
);
}
componentWillUnmount() {
const removeEvent = eee => eee && eee.remove();
removeEvent(this.updataFetchEmitter);
}
toPageB() {
Navigation.push('/pageB');
}
render() {
return (
<View>
<TouchableOpacity onPress={this.toPageB}>
<Text>点我专跳到pageB</Text>
</TouchableOpacity>
</View>
)
}
}
PageB:
import React, { Component } from 'react';
import { View, Text,TouchableOpacity,DeviceEventEmitter } from 'react-native';
import { Navigation } from 'react-native-navigation';
export default class PageB extends Component {
whenFinished() {
DeviceEventEmitter.emit('fetchEmitter');
Navigaition.back();
}
render() {
return (
<View>
<TouchableOpacity onPress={this.whenFinished}>
<Text>点我点我</Text>
</TouchableOpacity>
</View>
)
}
}