在原生应用开发中,为了解决不同组件之间的数据交互问题,经常会用到广播,或者使用接口等方式,如Android的EventBus等框架。而在React Native中,则可以通过DeviceEventEmitter来实现。
例如有下面一个效果,用以模拟广播。
DeviceEventEmitter的用法和EventBus一样,都是观察响应模式。一个最简单的场景,A页面使用DeviceEventEmitter发送消息,然后B页面获取到消息,然后使用B页面的状态机更新内容即可。
在原生应用开发中,为了解决不同组件之间的数据交互问题,经常会用到广播,或者使用接口等方式,如Android的EventBus等框架。而在React Native中,则可以通过DeviceEventEmitter来实现。
例如有下面一个效果,用以模拟广播。
DeviceEventEmitter的用法和EventBus一样,都是观察响应模式。一个最简单的场景,A页面使用DeviceEventEmitter发送消息,然后B页面获取到消息,然后使用B页面的状态机更新内容即可。
那么A页面发送消息的代码如下:
import { DeviceEventEmitter } from 'react-native'; //调用事件通知,param是指传递的相应参数 DeviceEventEmitter.emit('xxxName’,param);
然后在B页面接受消息,
import { DeviceEventEmitter } from 'react-native'; componentDidMount(){ DeviceEventEmitter.addListener('xxxName’, Function); }; //在组件销毁的时候要将其移除 componentWillUnmount(){ DeviceEventEmitter.remove(); };
和EventBus类似,当组件被消耗时,需要调用DeviceEventEmitter.remove()
。
如果需要更新某个组件的值,还需要对状态进行设置,
constructor() { super(); this.state = { msgCount:0, } } //接受消息,并对字段状态进行更新componentDidMount() { DeviceEventEmitter.addListener('xxxName', (num) => { console.log('收到通知:' + num) this.setState({ msgCount: num, } ); }); }