@samitouri / QOS-React-2 / commits / e86146e714

[react-events] Refine executeUserEventHandler (#16662)

Dominic Gannaway committed Sep 5, 2019 at 00:36 UTC e86146e714bb98e973404350069915bf2760a1bd
3 files changed +18 -12
packages/legacy-events/ReactGenericBatching.js
+5 -2
@@ -9,7 +9,9 @@ import {
9 needsStateRestore,
10 restoreStateIfNeeded,
11 } from './ReactControlledComponent';
12 +
13 import {enableFlareAPI} from 'shared/ReactFeatureFlags';
14 +import {invokeGuardedCallbackAndCatchFirstError} from 'shared/ReactErrorUtils';
15
16 // Used as a way to call batchedUpdates when we don't have a reference to
17 // the renderer. Such as when we're dispatching events or if third party
@@ -76,11 +78,12 @@ export function batchedEventUpdates(fn, a, b) {
78 }
79
80 // This is for the React Flare event system
79 -export function executeUserEventHandler(fn: any => void, value: any): any {
81 +export function executeUserEventHandler(fn: any => void, value: any): void {
82 const previouslyInEventHandler = isInsideEventHandler;
83 try {
84 isInsideEventHandler = true;
83 - return fn(value);
85 + const type = typeof value === 'object' && value !== null ? value.type : '';
86 + invokeGuardedCallbackAndCatchFirstError(type, fn, undefined, value);
87 } finally {
88 isInsideEventHandler = previouslyInEventHandler;
89 }
packages/react-dom/src/events/DOMEventResponderSystem.js
+8 -5
@@ -92,27 +92,30 @@ const eventResponderContext: ReactDOMResponderContext = {
92 eventValue: any,
93 eventListener: any => void,
94 eventPriority: EventPriority,
95 - ): any {
95 + ): void {
96 validateResponderContext();
97 validateEventValue(eventValue);
98 switch (eventPriority) {
99 case DiscreteEvent: {
100 flushDiscreteUpdatesIfNeeded(currentTimeStamp);
101 - return discreteUpdates(() =>
101 + discreteUpdates(() =>
102 executeUserEventHandler(eventListener, eventValue),
103 );
104 + break;
105 }
106 case UserBlockingEvent: {
107 if (enableUserBlockingEvents) {
107 - return runWithPriority(UserBlockingPriority, () =>
108 + runWithPriority(UserBlockingPriority, () =>
109 executeUserEventHandler(eventListener, eventValue),
110 );
111 } else {
111 - return executeUserEventHandler(eventListener, eventValue);
112 + executeUserEventHandler(eventListener, eventValue);
113 }
114 + break;
115 }
116 case ContinuousEvent: {
115 - return executeUserEventHandler(eventListener, eventValue);
117 + executeUserEventHandler(eventListener, eventValue);
118 + break;
119 }
120 }
121 },
packages/react-events/src/dom/Keyboard.js
+5 -5
@@ -173,11 +173,11 @@ function dispatchKeyboardEvent(
173 type,
174 defaultPrevented,
175 );
176 - const shouldPropagate = context.dispatchEvent(
177 - syntheticEvent,
178 - listener,
179 - DiscreteEvent,
180 - );
176 + let shouldPropagate;
177 + const listenerWithReturnValue = e => {
178 + shouldPropagate = listener(e);
179 + };
180 + context.dispatchEvent(syntheticEvent, listenerWithReturnValue, DiscreteEvent);
181 if (shouldPropagate) {
182 context.continuePropagation();
183 }