React Native 使用DeviceEventEmitter实现事件监听和触发

本文介绍了如何在React Native中利用DeviceEventEmitter进行跨组件通信,特别是在子页面或同级页面间操作时,当组件之间的联系较弱时,DeviceEventEmitter提供了一种事件监听和触发的方法。通过增加监听事件和触发事件的示例代码,阐述了其在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
    )
  }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值