Skip to content

Commit a81b7d1

Browse files
yungstersfacebook-github-bot
authored andcommitted
RN: Cleanup RCTNetworking (iOS)
Summary: Refactors `RCTNeworking.ios.js` so that event registration does not get passed along to `NativeNetworkingIOS`. Instead, we go straight to `RCTDeviceEventEmitter` (which is what `NativeEventEmitter` ultimately does when `nativeModule` is not supplied). This optimization reduces overhead of making network requests, and it is made possible because `NativeNetworkingIOS` does not actually do any meaningful work when `startObserving` is invoked. Changelog: [iOS][Removed] - Removed event methods except `addListener` from `Networking` Reviewed By: lunaleaps Differential Revision: D26137965 fbshipit-source-id: b6e0288689459ddb8ecf8d34dce6250d3b0ecb59
1 parent 88c4349 commit a81b7d1

File tree

1 file changed

+63
-21
lines changed

1 file changed

+63
-21
lines changed

Libraries/Network/RCTNetworking.ios.js

+63-21
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,72 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @format
87
* @flow strict-local
8+
* @format
99
*/
1010

1111
'use strict';
1212

13-
import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';
13+
import RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';
1414
import NativeNetworkingIOS from './NativeNetworkingIOS';
15-
import type {NativeResponseType} from './XMLHttpRequest';
16-
import convertRequestBody from './convertRequestBody';
17-
import type {RequestBody} from './convertRequestBody';
15+
import {type NativeResponseType} from './XMLHttpRequest';
16+
import convertRequestBody, {type RequestBody} from './convertRequestBody';
17+
import {type EventSubscription} from '../vendor/emitter/EventEmitter';
1818

19-
// FIXME: use typed events
20-
class RCTNetworking extends NativeEventEmitter<$FlowFixMe> {
21-
constructor() {
22-
const disableCallsIntoModule =
23-
typeof global.__disableRCTNetworkingExtraneousModuleCalls === 'function'
24-
? global.__disableRCTNetworkingExtraneousModuleCalls()
25-
: false;
19+
type RCTNetworkingEventDefinitions = $ReadOnly<{
20+
didSendNetworkData: [
21+
[
22+
number, // requestId
23+
number, // progress
24+
number, // total
25+
],
26+
],
27+
didReceiveNetworkResponse: [
28+
[
29+
number, // requestId
30+
number, // status
31+
?{[string]: string}, // responseHeaders
32+
?string, // responseURL
33+
],
34+
],
35+
didReceiveNetworkData: [
36+
[
37+
number, // requestId
38+
string, // response
39+
],
40+
],
41+
didReceiveNetworkIncrementalData: [
42+
[
43+
number, // requestId
44+
string, // responseText
45+
number, // progress
46+
number, // total
47+
],
48+
],
49+
didReceiveNetworkDataProgress: [
50+
[
51+
number, // requestId
52+
number, // loaded
53+
number, // total
54+
],
55+
],
56+
didCompleteNetworkResponse: [
57+
[
58+
number, // requestId
59+
string, // error
60+
boolean, // timeOutError
61+
],
62+
],
63+
}>;
2664

27-
super(NativeNetworkingIOS, {
28-
__SECRET_DISABLE_CALLS_INTO_MODULE_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: disableCallsIntoModule,
29-
});
30-
}
65+
const RCTNetworking = {
66+
addListener<K: $Keys<RCTNetworkingEventDefinitions>>(
67+
eventType: K,
68+
listener: (...$ElementType<RCTNetworkingEventDefinitions, K>) => mixed,
69+
context?: mixed,
70+
): EventSubscription {
71+
return RCTDeviceEventEmitter.addListener(eventType, listener, context);
72+
},
3173

3274
sendRequest(
3375
method: string,
@@ -55,15 +97,15 @@ class RCTNetworking extends NativeEventEmitter<$FlowFixMe> {
5597
},
5698
callback,
5799
);
58-
}
100+
},
59101

60102
abortRequest(requestId: number) {
61103
NativeNetworkingIOS.abortRequest(requestId);
62-
}
104+
},
63105

64106
clearCookies(callback: (result: boolean) => void) {
65107
NativeNetworkingIOS.clearCookies(callback);
66-
}
67-
}
108+
},
109+
};
68110

69-
module.exports = (new RCTNetworking(): RCTNetworking);
111+
module.exports = RCTNetworking;

0 commit comments

Comments
 (0)