Skip to content

Commit e86146e

Browse files
authored
[react-events] Refine executeUserEventHandler (#16662)
1 parent c66edb9 commit e86146e

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

packages/legacy-events/ReactGenericBatching.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import {
99
needsStateRestore,
1010
restoreStateIfNeeded,
1111
} from './ReactControlledComponent';
12+
1213
import {enableFlareAPI} from 'shared/ReactFeatureFlags';
14+
import {invokeGuardedCallbackAndCatchFirstError} from 'shared/ReactErrorUtils';
1315

1416
// Used as a way to call batchedUpdates when we don't have a reference to
1517
// the renderer. Such as when we're dispatching events or if third party
@@ -76,11 +78,12 @@ export function batchedEventUpdates(fn, a, b) {
7678
}
7779

7880
// 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 {
8082
const previouslyInEventHandler = isInsideEventHandler;
8183
try {
8284
isInsideEventHandler = true;
83-
return fn(value);
85+
const type = typeof value === 'object' && value !== null ? value.type : '';
86+
invokeGuardedCallbackAndCatchFirstError(type, fn, undefined, value);
8487
} finally {
8588
isInsideEventHandler = previouslyInEventHandler;
8689
}

packages/react-dom/src/events/DOMEventResponderSystem.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,27 +92,30 @@ const eventResponderContext: ReactDOMResponderContext = {
9292
eventValue: any,
9393
eventListener: any => void,
9494
eventPriority: EventPriority,
95-
): any {
95+
): void {
9696
validateResponderContext();
9797
validateEventValue(eventValue);
9898
switch (eventPriority) {
9999
case DiscreteEvent: {
100100
flushDiscreteUpdatesIfNeeded(currentTimeStamp);
101-
return discreteUpdates(() =>
101+
discreteUpdates(() =>
102102
executeUserEventHandler(eventListener, eventValue),
103103
);
104+
break;
104105
}
105106
case UserBlockingEvent: {
106107
if (enableUserBlockingEvents) {
107-
return runWithPriority(UserBlockingPriority, () =>
108+
runWithPriority(UserBlockingPriority, () =>
108109
executeUserEventHandler(eventListener, eventValue),
109110
);
110111
} else {
111-
return executeUserEventHandler(eventListener, eventValue);
112+
executeUserEventHandler(eventListener, eventValue);
112113
}
114+
break;
113115
}
114116
case ContinuousEvent: {
115-
return executeUserEventHandler(eventListener, eventValue);
117+
executeUserEventHandler(eventListener, eventValue);
118+
break;
116119
}
117120
}
118121
},

packages/react-events/src/dom/Keyboard.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ function dispatchKeyboardEvent(
173173
type,
174174
defaultPrevented,
175175
);
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);
181181
if (shouldPropagate) {
182182
context.continuePropagation();
183183
}

0 commit comments

Comments
 (0)