mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
cb6cbd12f8
Summary: Deprecates `EventEmitter#removeSubscription`. This required temporarily introducing a new `__removeSubscription` method that is only invoked by `EmitterSubscription`. This is necessary so that we do not completely break usages of `EventEmitter` that are supplying constructor arguments (which is also deprecated, but still supported until the next release). Calling this method will now cause a warning to appear with instructions to instead invoke `remove()` on the subscription itself. Lastly, changed `console.error` deprecation notice to instead use `console.warn`. This is in line with the principle that errors are "broken today" and warnings will be "broken tomorrow". Changelog: [General][Deprecated] - `EventEmitter#removeSubscription` is now deprecated. Reviewed By: rubennorte Differential Revision: D27704279 fbshipit-source-id: 581f5b2ab46b1bcfc1d20898b3d3392988dccbd5
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow strict
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import type EventEmitter from './EventEmitter';
|
|
import _EventSubscription from './_EventSubscription';
|
|
import type EventSubscriptionVendor from './_EventSubscriptionVendor';
|
|
import {type EventSubscription} from './EventSubscription';
|
|
|
|
/**
|
|
* EmitterSubscription represents a subscription with listener and context data.
|
|
*/
|
|
class EmitterSubscription<EventDefinitions: {...}, K: $Keys<EventDefinitions>>
|
|
extends _EventSubscription<EventDefinitions, K>
|
|
implements EventSubscription {
|
|
emitter: EventEmitter<EventDefinitions>;
|
|
listener: ?(...$ElementType<EventDefinitions, K>) => mixed;
|
|
context: ?$FlowFixMe;
|
|
|
|
/**
|
|
* @param {EventEmitter} emitter - The event emitter that registered this
|
|
* subscription
|
|
* @param {EventSubscriptionVendor} subscriber - The subscriber that controls
|
|
* this subscription
|
|
* @param {function} listener - Function to invoke when the specified event is
|
|
* emitted
|
|
* @param {*} context - Optional context object to use when invoking the
|
|
* listener
|
|
*/
|
|
constructor(
|
|
emitter: EventEmitter<EventDefinitions>,
|
|
subscriber: EventSubscriptionVendor<EventDefinitions>,
|
|
listener: (...$ElementType<EventDefinitions, K>) => mixed,
|
|
context: ?$FlowFixMe,
|
|
) {
|
|
super(subscriber);
|
|
this.emitter = emitter;
|
|
this.listener = listener;
|
|
this.context = context;
|
|
}
|
|
|
|
/**
|
|
* Removes this subscription from the emitter that registered it.
|
|
* Note: we're overriding the `remove()` method of _EventSubscription here
|
|
* but deliberately not calling `super.remove()` as the responsibility
|
|
* for removing the subscription lies with the EventEmitter.
|
|
*/
|
|
remove(): void {
|
|
this.emitter.__removeSubscription(this);
|
|
}
|
|
}
|
|
|
|
module.exports = EmitterSubscription;
|