Remove unnecessary indirection in events
Ben Alpert committed
Oct 15, 2015 at 20:13 UTC
ef95128ae28e77793330b391c4512532a58181c5
7 files changed
+60
-77
src/renderers/dom/client/ReactBrowserEventEmitter.js
+1
-20
@@ -13,10 +13,8 @@
13
'use strict';
14
15
var EventConstants = require('EventConstants');
16
-var EventPluginHub = require('EventPluginHub');
16
var EventPluginRegistry = require('EventPluginRegistry');
17
var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
19
-var ReactPerf = require('ReactPerf');
18
var ViewportMetrics = require('ViewportMetrics');
19
20
var assign = require('Object.assign');
@@ -166,7 +164,7 @@ function getListeningForDocument(mountAt) {
164
* `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
165
* example:
166
*
169
- * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
167
+ * EventPluginHub.putListener('myID', 'onClick', myFunction);
168
*
169
* This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
170
*
@@ -360,23 +358,6 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
358
}
359
},
360
363
- eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
364
-
365
- registrationNameModules: EventPluginHub.registrationNameModules,
366
-
367
- putListener: EventPluginHub.putListener,
368
-
369
- getListener: EventPluginHub.getListener,
370
-
371
- deleteListener: EventPluginHub.deleteListener,
372
-
373
- deleteAllListeners: EventPluginHub.deleteAllListeners,
374
-
375
-});
376
-
377
-ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {
378
- putListener: 'putListener',
379
- deleteListener: 'deleteListener',
361
});
362
363
module.exports = ReactBrowserEventEmitter;
src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js
+40
-43
@@ -25,6 +25,7 @@ var oldGetNode;
25
var oldGetFirstReactDOM;
26
27
var EventPluginHub;
28
+var EventPluginRegistry;
29
var ReactBrowserEventEmitter;
30
var ReactTestUtils;
31
var TapEventPlugin;
@@ -66,11 +67,10 @@ setID(PARENT, '.0.0.0');
67
setID(GRANDPARENT, '.0.0');
68
69
function registerSimpleTestHandler() {
69
- ReactBrowserEventEmitter.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
70
- var listener =
71
- ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
70
+ EventPluginHub.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
71
+ var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
72
expect(listener).toEqual(LISTENER);
73
- return ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
73
+ return EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
74
}
75
76
@@ -79,6 +79,7 @@ describe('ReactBrowserEventEmitter', function() {
79
require('mock-modules').dumpCache();
80
LISTENER.mockClear();
81
EventPluginHub = require('EventPluginHub');
82
+ EventPluginRegistry = require('EventPluginRegistry');
83
TapEventPlugin = require('TapEventPlugin');
84
ReactMount = require('ReactMount');
85
EventListener = require('EventListener');
@@ -108,23 +109,20 @@ describe('ReactBrowserEventEmitter', function() {
109
110
it('should store a listener correctly', function() {
111
registerSimpleTestHandler();
111
- var listener =
112
- ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
112
+ var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
113
expect(listener).toBe(LISTENER);
114
});
115
116
it('should retrieve a listener correctly', function() {
117
registerSimpleTestHandler();
118
- var listener =
119
- ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
118
+ var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
119
expect(listener).toEqual(LISTENER);
120
});
121
122
it('should clear all handlers when asked to', function() {
123
registerSimpleTestHandler();
125
- ReactBrowserEventEmitter.deleteAllListeners(getID(CHILD));
126
- var listener =
127
- ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
124
+ EventPluginHub.deleteAllListeners(getID(CHILD));
125
+ var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
126
expect(listener).toBe(undefined);
127
});
128
@@ -148,17 +146,17 @@ describe('ReactBrowserEventEmitter', function() {
146
);
147
148
it('should bubble simply', function() {
151
- ReactBrowserEventEmitter.putListener(
149
+ EventPluginHub.putListener(
150
getID(CHILD),
151
ON_CLICK_KEY,
152
recordID.bind(null, getID(CHILD))
153
);
156
- ReactBrowserEventEmitter.putListener(
154
+ EventPluginHub.putListener(
155
getID(PARENT),
156
ON_CLICK_KEY,
157
recordID.bind(null, getID(PARENT))
158
);
161
- ReactBrowserEventEmitter.putListener(
159
+ EventPluginHub.putListener(
160
getID(GRANDPARENT),
161
ON_CLICK_KEY,
162
recordID.bind(null, getID(GRANDPARENT))
@@ -171,12 +169,12 @@ describe('ReactBrowserEventEmitter', function() {
169
});
170
171
it('should continue bubbling if an error is thrown', function() {
174
- ReactBrowserEventEmitter.putListener(
172
+ EventPluginHub.putListener(
173
getID(CHILD),
174
ON_CLICK_KEY,
175
recordID.bind(null, getID(CHILD))
176
);
179
- ReactBrowserEventEmitter.putListener(
177
+ EventPluginHub.putListener(
178
getID(PARENT),
179
ON_CLICK_KEY,
180
function() {
@@ -184,7 +182,7 @@ describe('ReactBrowserEventEmitter', function() {
182
throw new Error('Handler interrupted');
183
}
184
);
187
- ReactBrowserEventEmitter.putListener(
185
+ EventPluginHub.putListener(
186
getID(GRANDPARENT),
187
ON_CLICK_KEY,
188
recordID.bind(null, getID(GRANDPARENT))
@@ -199,7 +197,7 @@ describe('ReactBrowserEventEmitter', function() {
197
});
198
199
it('should set currentTarget', function() {
202
- ReactBrowserEventEmitter.putListener(
200
+ EventPluginHub.putListener(
201
getID(CHILD),
202
ON_CLICK_KEY,
203
function(event) {
@@ -207,7 +205,7 @@ describe('ReactBrowserEventEmitter', function() {
205
expect(event.currentTarget).toBe(CHILD);
206
}
207
);
210
- ReactBrowserEventEmitter.putListener(
208
+ EventPluginHub.putListener(
209
getID(PARENT),
210
ON_CLICK_KEY,
211
function(event) {
@@ -215,7 +213,7 @@ describe('ReactBrowserEventEmitter', function() {
213
expect(event.currentTarget).toBe(PARENT);
214
}
215
);
218
- ReactBrowserEventEmitter.putListener(
216
+ EventPluginHub.putListener(
217
getID(GRANDPARENT),
218
ON_CLICK_KEY,
219
function(event) {
@@ -231,17 +229,17 @@ describe('ReactBrowserEventEmitter', function() {
229
});
230
231
it('should support stopPropagation()', function() {
234
- ReactBrowserEventEmitter.putListener(
232
+ EventPluginHub.putListener(
233
getID(CHILD),
234
ON_CLICK_KEY,
235
recordID.bind(null, getID(CHILD))
236
);
239
- ReactBrowserEventEmitter.putListener(
237
+ EventPluginHub.putListener(
238
getID(PARENT),
239
ON_CLICK_KEY,
240
recordIDAndStopPropagation.bind(null, getID(PARENT))
241
);
244
- ReactBrowserEventEmitter.putListener(
242
+ EventPluginHub.putListener(
243
getID(GRANDPARENT),
244
ON_CLICK_KEY,
245
recordID.bind(null, getID(GRANDPARENT))
@@ -253,17 +251,17 @@ describe('ReactBrowserEventEmitter', function() {
251
});
252
253
it('should stop after first dispatch if stopPropagation', function() {
256
- ReactBrowserEventEmitter.putListener(
254
+ EventPluginHub.putListener(
255
getID(CHILD),
256
ON_CLICK_KEY,
257
recordIDAndStopPropagation.bind(null, getID(CHILD))
258
);
261
- ReactBrowserEventEmitter.putListener(
259
+ EventPluginHub.putListener(
260
getID(PARENT),
261
ON_CLICK_KEY,
262
recordID.bind(null, getID(PARENT))
263
);
266
- ReactBrowserEventEmitter.putListener(
264
+ EventPluginHub.putListener(
265
getID(GRANDPARENT),
266
ON_CLICK_KEY,
267
recordID.bind(null, getID(GRANDPARENT))
@@ -274,17 +272,17 @@ describe('ReactBrowserEventEmitter', function() {
272
});
273
274
it('should not stopPropagation if false is returned', function() {
277
- ReactBrowserEventEmitter.putListener(
275
+ EventPluginHub.putListener(
276
getID(CHILD),
277
ON_CLICK_KEY,
278
recordIDAndReturnFalse.bind(null, getID(CHILD))
279
);
282
- ReactBrowserEventEmitter.putListener(
280
+ EventPluginHub.putListener(
281
getID(PARENT),
282
ON_CLICK_KEY,
283
recordID.bind(null, getID(PARENT))
284
);
287
- ReactBrowserEventEmitter.putListener(
285
+ EventPluginHub.putListener(
286
getID(GRANDPARENT),
287
ON_CLICK_KEY,
288
recordID.bind(null, getID(GRANDPARENT))
@@ -310,14 +308,14 @@ describe('ReactBrowserEventEmitter', function() {
308
it('should invoke handlers that were removed while bubbling', function() {
309
var handleParentClick = mocks.getMockFunction();
310
var handleChildClick = function(event) {
313
- ReactBrowserEventEmitter.deleteAllListeners(getID(PARENT));
311
+ EventPluginHub.deleteAllListeners(getID(PARENT));
312
};
315
- ReactBrowserEventEmitter.putListener(
313
+ EventPluginHub.putListener(
314
getID(CHILD),
315
ON_CLICK_KEY,
316
handleChildClick
317
);
320
- ReactBrowserEventEmitter.putListener(
318
+ EventPluginHub.putListener(
319
getID(PARENT),
320
ON_CLICK_KEY,
321
handleParentClick
@@ -329,13 +327,13 @@ describe('ReactBrowserEventEmitter', function() {
327
it('should not invoke newly inserted handlers while bubbling', function() {
328
var handleParentClick = mocks.getMockFunction();
329
var handleChildClick = function(event) {
332
- ReactBrowserEventEmitter.putListener(
330
+ EventPluginHub.putListener(
331
getID(PARENT),
332
ON_CLICK_KEY,
333
handleParentClick
334
);
335
};
338
- ReactBrowserEventEmitter.putListener(
336
+ EventPluginHub.putListener(
337
getID(CHILD),
338
ON_CLICK_KEY,
339
handleChildClick
@@ -345,7 +343,7 @@ describe('ReactBrowserEventEmitter', function() {
343
});
344
345
it('should have mouse enter simulated by test utils', function() {
348
- ReactBrowserEventEmitter.putListener(
346
+ EventPluginHub.putListener(
347
getID(CHILD),
348
ON_MOUSE_ENTER_KEY,
349
recordID.bind(null, getID(CHILD))
@@ -356,7 +354,7 @@ describe('ReactBrowserEventEmitter', function() {
354
});
355
356
it('should infer onTouchTap from a touchStart/End', function() {
359
- ReactBrowserEventEmitter.putListener(
357
+ EventPluginHub.putListener(
358
getID(CHILD),
359
ON_TOUCH_TAP_KEY,
360
recordID.bind(null, getID(CHILD))
@@ -374,7 +372,7 @@ describe('ReactBrowserEventEmitter', function() {
372
});
373
374
it('should infer onTouchTap from when dragging below threshold', function() {
377
- ReactBrowserEventEmitter.putListener(
375
+ EventPluginHub.putListener(
376
getID(CHILD),
377
ON_TOUCH_TAP_KEY,
378
recordID.bind(null, getID(CHILD))
@@ -392,7 +390,7 @@ describe('ReactBrowserEventEmitter', function() {
390
});
391
392
it('should not onTouchTap from when dragging beyond threshold', function() {
395
- ReactBrowserEventEmitter.putListener(
393
+ EventPluginHub.putListener(
394
getID(CHILD),
395
ON_TOUCH_TAP_KEY,
396
recordID.bind(null, getID(CHILD))
@@ -439,8 +437,7 @@ describe('ReactBrowserEventEmitter', function() {
437
setEventListeners.push(captureCalls[i][1]);
438
}
439
442
- var module =
443
- ReactBrowserEventEmitter.registrationNameModules[ON_CHANGE_KEY];
440
+ var module = EventPluginRegistry.registrationNameModules[ON_CHANGE_KEY];
441
var dependencies = module.eventTypes.change.dependencies;
442
expect(setEventListeners.length).toEqual(dependencies.length);
443
@@ -450,17 +447,17 @@ describe('ReactBrowserEventEmitter', function() {
447
});
448
449
it('should bubble onTouchTap', function() {
453
- ReactBrowserEventEmitter.putListener(
450
+ EventPluginHub.putListener(
451
getID(CHILD),
452
ON_TOUCH_TAP_KEY,
453
recordID.bind(null, getID(CHILD))
454
);
458
- ReactBrowserEventEmitter.putListener(
455
+ EventPluginHub.putListener(
456
getID(PARENT),
457
ON_TOUCH_TAP_KEY,
458
recordID.bind(null, getID(PARENT))
459
);
463
- ReactBrowserEventEmitter.putListener(
460
+ EventPluginHub.putListener(
461
getID(GRANDPARENT),
462
ON_TOUCH_TAP_KEY,
463
recordID.bind(null, getID(GRANDPARENT))
src/renderers/dom/shared/ReactDOMComponent.js
+6
-4
@@ -20,6 +20,8 @@ var DOMNamespaces = require('DOMNamespaces');
20
var DOMProperty = require('DOMProperty');
21
var DOMPropertyOperations = require('DOMPropertyOperations');
22
var EventConstants = require('EventConstants');
23
+var EventPluginHub = require('EventPluginHub');
24
+var EventPluginRegistry = require('EventPluginRegistry');
25
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
26
var ReactComponentBrowserEnvironment =
27
require('ReactComponentBrowserEnvironment');
@@ -45,9 +47,9 @@ var shallowEqual = require('shallowEqual');
47
var validateDOMNesting = require('validateDOMNesting');
48
var warning = require('warning');
49
48
-var deleteListener = ReactBrowserEventEmitter.deleteListener;
50
+var deleteListener = EventPluginHub.deleteListener;
51
var listenTo = ReactBrowserEventEmitter.listenTo;
50
-var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;
52
+var registrationNameModules = EventPluginRegistry.registrationNameModules;
53
54
// For quickly matching children type, to test if can be treated as content.
55
var CONTENT_TYPES = {'string': true, 'number': true};
@@ -312,7 +314,7 @@ function enqueuePutListener(id, registrationName, listener, transaction) {
314
315
function putListener() {
316
var listenerToPut = this;
315
- ReactBrowserEventEmitter.putListener(
317
+ EventPluginHub.putListener(
318
listenerToPut.id,
319
listenerToPut.registrationName,
320
listenerToPut.listener
@@ -1122,7 +1124,7 @@ ReactDOMComponent.Mixin = {
1124
this._nativeNode = null;
1125
1126
this.unmountChildren();
1125
- ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
1127
+ EventPluginHub.deleteAllListeners(this._rootNodeID);
1128
ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
1129
this._rootNodeID = null;
1130
this._wrapperState = null;
src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
+3
-3
@@ -819,7 +819,7 @@ describe('ReactDOMComponent', function() {
819
820
describe('unmountComponent', function() {
821
it('should clean up listeners', function() {
822
- var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
822
+ var EventPluginHub = require('EventPluginHub');
823
var ReactMount = require('ReactMount');
824
825
var container = document.createElement('div');
@@ -832,14 +832,14 @@ describe('ReactDOMComponent', function() {
832
var rootNode = ReactDOM.findDOMNode(instance);
833
var rootNodeID = ReactMount.getID(rootNode);
834
expect(
835
- ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
835
+ EventPluginHub.getListener(rootNodeID, 'onClick')
836
).toBe(callback);
837
expect(rootNode).toBe(ReactDOM.findDOMNode(instance));
838
839
ReactDOM.unmountComponentAtNode(container);
840
841
expect(
842
- ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
842
+ EventPluginHub.getListener(rootNodeID, 'onClick')
843
).toBe(undefined);
844
});
845
});
src/renderers/shared/event/EventPluginHub.js
+6
-4
@@ -14,6 +14,7 @@
14
var EventPluginRegistry = require('EventPluginRegistry');
15
var EventPluginUtils = require('EventPluginUtils');
16
var ReactErrorUtils = require('ReactErrorUtils');
17
+var ReactPerf = require('ReactPerf');
18
19
var accumulateInto = require('accumulateInto');
20
var forEachAccumulated = require('forEachAccumulated');
@@ -137,10 +138,6 @@ var EventPluginHub = {
138
139
},
140
140
- eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
141
-
142
- registrationNameModules: EventPluginRegistry.registrationNameModules,
143
-
141
/**
142
* Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
143
*
@@ -311,4 +308,9 @@ var EventPluginHub = {
308
309
};
310
311
+ReactPerf.measureMethods(EventPluginHub, 'EventPluginHub', {
312
+ putListener: 'putListener',
313
+ deleteListener: 'deleteListener',
314
+});
315
+
316
module.exports = EventPluginHub;
src/test/ReactDefaultPerf.js
+1
-1
@@ -165,7 +165,7 @@ var ReactDefaultPerf = {
165
].totalTime = performanceNow() - start;
166
return rv;
167
} else if (fnName === '_mountImageIntoNode' ||
168
- moduleName === 'ReactBrowserEventEmitter' ||
168
+ moduleName === 'EventPluginHub' ||
169
moduleName === 'ReactDOMIDOperations' ||
170
moduleName === 'CSSPropertyOperations' ||
171
moduleName === 'DOMChildrenOperations' ||
src/test/ReactTestUtils.js
+3
-2
@@ -14,6 +14,7 @@
14
var ClientReactRootIndex = require('ClientReactRootIndex');
15
var EventConstants = require('EventConstants');
16
var EventPluginHub = require('EventPluginHub');
17
+var EventPluginRegistry = require('EventPluginRegistry');
18
var EventPropagators = require('EventPropagators');
19
var React = require('React');
20
var ReactDOM = require('ReactDOM');
@@ -474,7 +475,7 @@ function makeSimulator(eventType) {
475
}
476
477
var dispatchConfig =
477
- ReactBrowserEventEmitter.eventNameDispatchConfigs[eventType];
478
+ EventPluginRegistry.eventNameDispatchConfigs[eventType];
479
480
var fakeNativeEvent = new Event();
481
fakeNativeEvent.target = node;
@@ -505,7 +506,7 @@ function buildSimulators() {
506
ReactTestUtils.Simulate = {};
507
508
var eventType;
508
- for (eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs) {
509
+ for (eventType in EventPluginRegistry.eventNameDispatchConfigs) {
510
/**
511
* @param {!Element|ReactDOMComponent} domComponentOrNode
512
* @param {?object} eventData Fake event data to use in SyntheticEvent.