mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Merge pull request #5192 from spicyj/ev-ind
Remove unnecessary indirection in events
This commit is contained in:
@@ -13,10 +13,8 @@
|
||||
'use strict';
|
||||
|
||||
var EventConstants = require('EventConstants');
|
||||
var EventPluginHub = require('EventPluginHub');
|
||||
var EventPluginRegistry = require('EventPluginRegistry');
|
||||
var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
|
||||
var ReactPerf = require('ReactPerf');
|
||||
var ViewportMetrics = require('ViewportMetrics');
|
||||
|
||||
var assign = require('Object.assign');
|
||||
@@ -166,7 +164,7 @@ function getListeningForDocument(mountAt) {
|
||||
* `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
|
||||
* example:
|
||||
*
|
||||
* ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
|
||||
* EventPluginHub.putListener('myID', 'onClick', myFunction);
|
||||
*
|
||||
* This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
|
||||
*
|
||||
@@ -360,23 +358,6 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
|
||||
}
|
||||
},
|
||||
|
||||
eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
|
||||
|
||||
registrationNameModules: EventPluginHub.registrationNameModules,
|
||||
|
||||
putListener: EventPluginHub.putListener,
|
||||
|
||||
getListener: EventPluginHub.getListener,
|
||||
|
||||
deleteListener: EventPluginHub.deleteListener,
|
||||
|
||||
deleteAllListeners: EventPluginHub.deleteAllListeners,
|
||||
|
||||
});
|
||||
|
||||
ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {
|
||||
putListener: 'putListener',
|
||||
deleteListener: 'deleteListener',
|
||||
});
|
||||
|
||||
module.exports = ReactBrowserEventEmitter;
|
||||
|
||||
@@ -25,6 +25,7 @@ var oldGetNode;
|
||||
var oldGetFirstReactDOM;
|
||||
|
||||
var EventPluginHub;
|
||||
var EventPluginRegistry;
|
||||
var ReactBrowserEventEmitter;
|
||||
var ReactTestUtils;
|
||||
var TapEventPlugin;
|
||||
@@ -66,11 +67,10 @@ setID(PARENT, '.0.0.0');
|
||||
setID(GRANDPARENT, '.0.0');
|
||||
|
||||
function registerSimpleTestHandler() {
|
||||
ReactBrowserEventEmitter.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
|
||||
var listener =
|
||||
ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
EventPluginHub.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
|
||||
var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
expect(listener).toEqual(LISTENER);
|
||||
return ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
return EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
require('mock-modules').dumpCache();
|
||||
LISTENER.mockClear();
|
||||
EventPluginHub = require('EventPluginHub');
|
||||
EventPluginRegistry = require('EventPluginRegistry');
|
||||
TapEventPlugin = require('TapEventPlugin');
|
||||
ReactMount = require('ReactMount');
|
||||
EventListener = require('EventListener');
|
||||
@@ -108,23 +109,20 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
|
||||
it('should store a listener correctly', function() {
|
||||
registerSimpleTestHandler();
|
||||
var listener =
|
||||
ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
expect(listener).toBe(LISTENER);
|
||||
});
|
||||
|
||||
it('should retrieve a listener correctly', function() {
|
||||
registerSimpleTestHandler();
|
||||
var listener =
|
||||
ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
expect(listener).toEqual(LISTENER);
|
||||
});
|
||||
|
||||
it('should clear all handlers when asked to', function() {
|
||||
registerSimpleTestHandler();
|
||||
ReactBrowserEventEmitter.deleteAllListeners(getID(CHILD));
|
||||
var listener =
|
||||
ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
EventPluginHub.deleteAllListeners(getID(CHILD));
|
||||
var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
|
||||
expect(listener).toBe(undefined);
|
||||
});
|
||||
|
||||
@@ -148,17 +146,17 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
);
|
||||
|
||||
it('should bubble simply', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(PARENT))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
@@ -171,12 +169,12 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should continue bubbling if an error is thrown', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
function() {
|
||||
@@ -184,7 +182,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
throw new Error('Handler interrupted');
|
||||
}
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
@@ -199,7 +197,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should set currentTarget', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
function(event) {
|
||||
@@ -207,7 +205,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
expect(event.currentTarget).toBe(CHILD);
|
||||
}
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
function(event) {
|
||||
@@ -215,7 +213,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
expect(event.currentTarget).toBe(PARENT);
|
||||
}
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
function(event) {
|
||||
@@ -231,17 +229,17 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should support stopPropagation()', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordIDAndStopPropagation.bind(null, getID(PARENT))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
@@ -253,17 +251,17 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should stop after first dispatch if stopPropagation', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
recordIDAndStopPropagation.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(PARENT))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
@@ -274,17 +272,17 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should not stopPropagation if false is returned', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
recordIDAndReturnFalse.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(PARENT))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_CLICK_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
@@ -310,14 +308,14 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
it('should invoke handlers that were removed while bubbling', function() {
|
||||
var handleParentClick = mocks.getMockFunction();
|
||||
var handleChildClick = function(event) {
|
||||
ReactBrowserEventEmitter.deleteAllListeners(getID(PARENT));
|
||||
EventPluginHub.deleteAllListeners(getID(PARENT));
|
||||
};
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
handleChildClick
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
handleParentClick
|
||||
@@ -329,13 +327,13 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
it('should not invoke newly inserted handlers while bubbling', function() {
|
||||
var handleParentClick = mocks.getMockFunction();
|
||||
var handleChildClick = function(event) {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_CLICK_KEY,
|
||||
handleParentClick
|
||||
);
|
||||
};
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_CLICK_KEY,
|
||||
handleChildClick
|
||||
@@ -345,7 +343,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should have mouse enter simulated by test utils', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_MOUSE_ENTER_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
@@ -356,7 +354,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should infer onTouchTap from a touchStart/End', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
@@ -374,7 +372,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should infer onTouchTap from when dragging below threshold', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
@@ -392,7 +390,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should not onTouchTap from when dragging beyond threshold', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
@@ -439,8 +437,7 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
setEventListeners.push(captureCalls[i][1]);
|
||||
}
|
||||
|
||||
var module =
|
||||
ReactBrowserEventEmitter.registrationNameModules[ON_CHANGE_KEY];
|
||||
var module = EventPluginRegistry.registrationNameModules[ON_CHANGE_KEY];
|
||||
var dependencies = module.eventTypes.change.dependencies;
|
||||
expect(setEventListeners.length).toEqual(dependencies.length);
|
||||
|
||||
@@ -450,17 +447,17 @@ describe('ReactBrowserEventEmitter', function() {
|
||||
});
|
||||
|
||||
it('should bubble onTouchTap', function() {
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(CHILD),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(CHILD))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(PARENT),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(PARENT))
|
||||
);
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
getID(GRANDPARENT),
|
||||
ON_TOUCH_TAP_KEY,
|
||||
recordID.bind(null, getID(GRANDPARENT))
|
||||
|
||||
@@ -20,6 +20,8 @@ var DOMNamespaces = require('DOMNamespaces');
|
||||
var DOMProperty = require('DOMProperty');
|
||||
var DOMPropertyOperations = require('DOMPropertyOperations');
|
||||
var EventConstants = require('EventConstants');
|
||||
var EventPluginHub = require('EventPluginHub');
|
||||
var EventPluginRegistry = require('EventPluginRegistry');
|
||||
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
|
||||
var ReactComponentBrowserEnvironment =
|
||||
require('ReactComponentBrowserEnvironment');
|
||||
@@ -45,9 +47,9 @@ var shallowEqual = require('shallowEqual');
|
||||
var validateDOMNesting = require('validateDOMNesting');
|
||||
var warning = require('warning');
|
||||
|
||||
var deleteListener = ReactBrowserEventEmitter.deleteListener;
|
||||
var deleteListener = EventPluginHub.deleteListener;
|
||||
var listenTo = ReactBrowserEventEmitter.listenTo;
|
||||
var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;
|
||||
var registrationNameModules = EventPluginRegistry.registrationNameModules;
|
||||
|
||||
// For quickly matching children type, to test if can be treated as content.
|
||||
var CONTENT_TYPES = {'string': true, 'number': true};
|
||||
@@ -312,7 +314,7 @@ function enqueuePutListener(id, registrationName, listener, transaction) {
|
||||
|
||||
function putListener() {
|
||||
var listenerToPut = this;
|
||||
ReactBrowserEventEmitter.putListener(
|
||||
EventPluginHub.putListener(
|
||||
listenerToPut.id,
|
||||
listenerToPut.registrationName,
|
||||
listenerToPut.listener
|
||||
@@ -1146,7 +1148,7 @@ ReactDOMComponent.Mixin = {
|
||||
this._nativeNode = null;
|
||||
|
||||
this.unmountChildren();
|
||||
ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
|
||||
EventPluginHub.deleteAllListeners(this._rootNodeID);
|
||||
ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
|
||||
this._rootNodeID = null;
|
||||
this._wrapperState = null;
|
||||
|
||||
@@ -819,7 +819,7 @@ describe('ReactDOMComponent', function() {
|
||||
|
||||
describe('unmountComponent', function() {
|
||||
it('should clean up listeners', function() {
|
||||
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
|
||||
var EventPluginHub = require('EventPluginHub');
|
||||
var ReactMount = require('ReactMount');
|
||||
|
||||
var container = document.createElement('div');
|
||||
@@ -832,14 +832,14 @@ describe('ReactDOMComponent', function() {
|
||||
var rootNode = ReactDOM.findDOMNode(instance);
|
||||
var rootNodeID = ReactMount.getID(rootNode);
|
||||
expect(
|
||||
ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
|
||||
EventPluginHub.getListener(rootNodeID, 'onClick')
|
||||
).toBe(callback);
|
||||
expect(rootNode).toBe(ReactDOM.findDOMNode(instance));
|
||||
|
||||
ReactDOM.unmountComponentAtNode(container);
|
||||
|
||||
expect(
|
||||
ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
|
||||
EventPluginHub.getListener(rootNodeID, 'onClick')
|
||||
).toBe(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var EventPluginRegistry = require('EventPluginRegistry');
|
||||
var EventPluginUtils = require('EventPluginUtils');
|
||||
var ReactErrorUtils = require('ReactErrorUtils');
|
||||
var ReactPerf = require('ReactPerf');
|
||||
|
||||
var accumulateInto = require('accumulateInto');
|
||||
var forEachAccumulated = require('forEachAccumulated');
|
||||
@@ -137,10 +138,6 @@ var EventPluginHub = {
|
||||
|
||||
},
|
||||
|
||||
eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
|
||||
|
||||
registrationNameModules: EventPluginRegistry.registrationNameModules,
|
||||
|
||||
/**
|
||||
* Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
|
||||
*
|
||||
@@ -311,4 +308,9 @@ var EventPluginHub = {
|
||||
|
||||
};
|
||||
|
||||
ReactPerf.measureMethods(EventPluginHub, 'EventPluginHub', {
|
||||
putListener: 'putListener',
|
||||
deleteListener: 'deleteListener',
|
||||
});
|
||||
|
||||
module.exports = EventPluginHub;
|
||||
|
||||
@@ -165,7 +165,7 @@ var ReactDefaultPerf = {
|
||||
].totalTime = performanceNow() - start;
|
||||
return rv;
|
||||
} else if (fnName === '_mountImageIntoNode' ||
|
||||
moduleName === 'ReactBrowserEventEmitter' ||
|
||||
moduleName === 'EventPluginHub' ||
|
||||
moduleName === 'ReactDOMIDOperations' ||
|
||||
moduleName === 'CSSPropertyOperations' ||
|
||||
moduleName === 'DOMChildrenOperations' ||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var ClientReactRootIndex = require('ClientReactRootIndex');
|
||||
var EventConstants = require('EventConstants');
|
||||
var EventPluginHub = require('EventPluginHub');
|
||||
var EventPluginRegistry = require('EventPluginRegistry');
|
||||
var EventPropagators = require('EventPropagators');
|
||||
var React = require('React');
|
||||
var ReactDOM = require('ReactDOM');
|
||||
@@ -476,7 +477,7 @@ function makeSimulator(eventType) {
|
||||
}
|
||||
|
||||
var dispatchConfig =
|
||||
ReactBrowserEventEmitter.eventNameDispatchConfigs[eventType];
|
||||
EventPluginRegistry.eventNameDispatchConfigs[eventType];
|
||||
|
||||
var fakeNativeEvent = new Event();
|
||||
fakeNativeEvent.target = node;
|
||||
@@ -507,7 +508,7 @@ function buildSimulators() {
|
||||
ReactTestUtils.Simulate = {};
|
||||
|
||||
var eventType;
|
||||
for (eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs) {
|
||||
for (eventType in EventPluginRegistry.eventNameDispatchConfigs) {
|
||||
/**
|
||||
* @param {!Element|ReactDOMComponent} domComponentOrNode
|
||||
* @param {?object} eventData Fake event data to use in SyntheticEvent.
|
||||
|
||||
Reference in New Issue
Block a user