Есть removeCurrentListener, но нет метода removeListener.

17
Joon 27 Апр 2016 в 13:04

2 ответа

Лучший ответ

Я сам нашел ответ.

https://github.com/facebook/react-native/blob/235b16d93287061a09c4624e612b5dc4f960ce47/Libraries/vendor/emitter/EventEmitter.js

addListener возвращает экземпляр EmitterSubscription, который расширяет EventSubscription, имеющий метод remove.

https://github.com/facebook/react-native/blob/235b16d93287061a09c4624e612b5dc4f960ce47/Libraries/vendor/emitter/EventSubscription.js

const emitter = new EventEmitter();

const subscription = emitter.addListener('eventname', () => {});

subscription.remove(); // Removes the subscription
37
Joon 27 Апр 2016 в 21:23

На самом деле это так (если я не понимаю ваш вопрос).

Вот как я это делаю:

class Store extends EventEmitter {
    constructor(listenerKey) {
        super()
        this.listenerKey = listenerKey
    }

    emitChange() {
        setTimeout(() => {
            this.emit(this.listenerKey)
        }, 0)
    }

    addChangeListener(callback) {
        this.on(this.listenerKey, callback)
    }

    removeChangeListener(callback) {
        this.removeListener(this.listenerKey, callback)
    }
}
3
David Schumann 27 Мар 2018 в 10:13