react native DeviceEventEmitter unsubscribe from event

11,191

DeviceEventEmitter is deprecated, you should use NativeEventEmitter instead.

Example :

import { NativeEventEmitter, NativeModules } from 'react-native';

const { CalendarManager } = NativeModules;

const calendarManagerEmitter = new NativeEventEmitter(CalendarManager);

const subscription = calendarManagerEmitter.addListener(
  'EventReminder',
  (reminder) => console.log(reminder.name)
);

...

// Don't forget to unsubscribe, typically in componentWillUnmount
subscription.remove();
Share:
11,191
Sander Koldenhof
Author by

Sander Koldenhof

Updated on June 04, 2022

Comments

  • Sander Koldenhof
    Sander Koldenhof almost 2 years

    I'm using DeviceEventEmitter to handle events of a favorite method, to which is subscribed in the constructor:

    DeviceEventEmitter.addListener("FavoriteClick", async (e) => 
    {
        // do something
    })
    

    This event listener stays active whenever the components unmounts (permenantly). What do I have to call to unsub? I've tried storing the event as a variable and calling listener.removeCurrentListener() in the componentWillUnmount() like the (limited) documentation states, if I understand that correctly, but removeCurrentListener() is not a method.

    • sansa
      sansa almost 3 years
      addListener returns an EmitterSubscription, which has the inherent method ".remove()". Therefore, your code should look like this: const favoriteClickSub = DeviceEventEmitter.addListener("FavoriteClick", (e) => {}); favoriteClickSub.remove();