Skip to content

Commit c66edb9

Browse files
authored
[react-events] Refactor getCurrentTarget to getResponderNode (#16660)
1 parent 9ff60ff commit c66edb9

File tree

11 files changed

+22
-57
lines changed

11 files changed

+22
-57
lines changed

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

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ type ResponderTimer = {|
6666
instance: ReactDOMEventResponderInstance,
6767
func: () => void,
6868
id: number,
69-
targetFiber: Fiber | null,
7069
timeStamp: number,
7170
|};
7271

@@ -87,7 +86,6 @@ let currentInstance: null | ReactDOMEventResponderInstance = null;
8786
let currentTimerIDCounter = 0;
8887
let currentDocument: null | Document = null;
8988
let currentPropagationBehavior: PropagationBehavior = DoNotPropagateToNextResponder;
90-
let currentTargetFiber: null | Fiber = null;
9189

9290
const eventResponderContext: ReactDOMResponderContext = {
9391
dispatchEvent(
@@ -230,7 +228,6 @@ const eventResponderContext: ReactDOMResponderContext = {
230228
instance: ((currentInstance: any): ReactDOMEventResponderInstance),
231229
func,
232230
id: timerId,
233-
targetFiber: currentTargetFiber,
234231
timeStamp: currentTimeStamp,
235232
});
236233
activeTimeouts.set(timerId, timeout);
@@ -273,23 +270,14 @@ const eventResponderContext: ReactDOMResponderContext = {
273270
currentPropagationBehavior = PropagateToNextResponder;
274271
},
275272
enqueueStateRestore,
276-
getCurrentTarget(): Element | null {
273+
getResponderNode(): Element | null {
277274
validateResponderContext();
278275
const responderFiber = ((currentInstance: any): ReactDOMEventResponderInstance)
279276
.fiber;
280-
let fiber = currentTargetFiber;
281-
let currentTarget = null;
282-
283-
while (fiber !== null) {
284-
if (fiber.tag === HostComponent) {
285-
currentTarget = fiber.stateNode;
286-
}
287-
if (fiber === responderFiber || fiber.alternate === responderFiber) {
288-
break;
289-
}
290-
fiber = fiber.return;
277+
if (responderFiber.tag === ScopeComponent) {
278+
return null;
291279
}
292-
return currentTarget;
280+
return responderFiber.stateNode;
293281
},
294282
};
295283

@@ -373,9 +361,8 @@ function processTimers(
373361
try {
374362
batchedEventUpdates(() => {
375363
for (let i = 0; i < timersArr.length; i++) {
376-
const {instance, func, id, timeStamp, targetFiber} = timersArr[i];
364+
const {instance, func, id, timeStamp} = timersArr[i];
377365
currentInstance = instance;
378-
currentTargetFiber = targetFiber;
379366
currentTimeStamp = timeStamp + delay;
380367
try {
381368
func();
@@ -388,7 +375,6 @@ function processTimers(
388375
currentTimers = null;
389376
currentInstance = null;
390377
currentTimeStamp = 0;
391-
currentTargetFiber = null;
392378
}
393379
}
394380

@@ -599,10 +585,8 @@ export function dispatchEventForResponderEventSystem(
599585
const previousTimeStamp = currentTimeStamp;
600586
const previousDocument = currentDocument;
601587
const previousPropagationBehavior = currentPropagationBehavior;
602-
const previousTargetFiber = currentTargetFiber;
603588
currentPropagationBehavior = DoNotPropagateToNextResponder;
604589
currentTimers = null;
605-
currentTargetFiber = targetFiber;
606590
// nodeType 9 is DOCUMENT_NODE
607591
currentDocument =
608592
(nativeEventTarget: any).nodeType === 9
@@ -626,7 +610,6 @@ export function dispatchEventForResponderEventSystem(
626610
currentTimeStamp = previousTimeStamp;
627611
currentDocument = previousDocument;
628612
currentPropagationBehavior = previousPropagationBehavior;
629-
currentTargetFiber = previousTargetFiber;
630613
}
631614
}
632615
}

packages/react-dom/src/events/__tests__/DOMEventResponderSystem-test.internal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ describe('DOMEventResponderSystem', () => {
10171017
const obj = {
10181018
counter,
10191019
timeStamp: context.getTimeStamp(),
1020-
target: context.getCurrentTarget(),
1020+
target: context.getResponderNode(),
10211021
type: 'click-test',
10221022
};
10231023
context.dispatchEvent(obj, props.onClick, DiscreteEvent);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ const focusResponderImpl = {
289289

290290
switch (type) {
291291
case 'focus': {
292-
state.focusTarget = context.getCurrentTarget();
292+
state.focusTarget = context.getResponderNode();
293293
// Limit focus events to the direct child of the event component.
294294
// Browser focus is not expected to bubble.
295295
if (!state.isFocused && state.focusTarget === target) {
@@ -427,7 +427,7 @@ const focusWithinResponderImpl = {
427427

428428
switch (type) {
429429
case 'focus': {
430-
state.focusTarget = context.getCurrentTarget();
430+
state.focusTarget = context.getResponderNode();
431431
// Limit focus events to the direct child of the event component.
432432
// Browser focus is not expected to bubble.
433433
if (!state.isFocused) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ const hoverResponderImpl = {
235235
// START
236236
case 'pointerover': {
237237
if (!state.isHovered && pointerType !== 'touch') {
238-
state.hoverTarget = context.getCurrentTarget();
238+
state.hoverTarget = context.getResponderNode();
239239
dispatchHoverStartEvents(event, context, props, state);
240240
}
241241
break;
@@ -295,7 +295,7 @@ const hoverResponderFallbackImpl = {
295295
// START
296296
case 'mouseover': {
297297
if (!state.isHovered && !state.ignoreEmulatedMouseEvents) {
298-
state.hoverTarget = context.getCurrentTarget();
298+
state.hoverTarget = context.getResponderNode();
299299
dispatchHoverStartEvents(event, context, props, state);
300300
}
301301
break;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ const inputResponderImpl = {
184184
if (props.disabled) {
185185
return;
186186
}
187-
const currentTarget = context.getCurrentTarget();
187+
const currentTarget = context.getResponderNode();
188188
if (target !== currentTarget || currentTarget === null) {
189189
return;
190190
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ function createKeyboardEvent(
143143
repeat,
144144
shiftKey,
145145
} = nativeEvent;
146-
const target = ((context.getCurrentTarget(): any): Element);
147146

148147
return {
149148
altKey,
@@ -155,7 +154,7 @@ function createKeyboardEvent(
155154
metaKey,
156155
repeat,
157156
shiftKey,
158-
target,
157+
target: event.target,
159158
timeStamp: context.getTimeStamp(),
160159
type,
161160
};

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ const pressResponderImpl = {
582582
// We set these here, before the button check so we have this
583583
// data around for handling of the context menu
584584
state.pointerType = pointerType;
585-
const pressTarget = (state.pressTarget = context.getCurrentTarget());
585+
const pressTarget = (state.pressTarget = context.getResponderNode());
586586
if (isPointerEvent) {
587587
state.activePointerId = pointerId;
588588
} else if (isTouchEvent) {
@@ -634,7 +634,7 @@ const pressResponderImpl = {
634634

635635
if (isFunction(onPress) && isScreenReaderVirtualClick(nativeEvent)) {
636636
state.pointerType = 'keyboard';
637-
state.pressTarget = context.getCurrentTarget();
637+
state.pressTarget = context.getResponderNode();
638638
const preventDefault = props.preventDefault;
639639

640640
if (preventDefault !== false) {

packages/react-events/src/rn/Press.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ const pressResponderImpl = {
412412
if (type === 'topTouchStart') {
413413
if (!state.isPressed) {
414414
state.pointerType = 'touch';
415-
const pressTarget = (state.pressTarget = context.getCurrentTarget());
415+
const pressTarget = (state.pressTarget = context.getResponderNode());
416416
const touchEvent = getTouchFromPressEvent(nativeEvent);
417417
if (touchEvent === null) {
418418
return;

packages/react-native-renderer/src/ReactFabricEventResponderSystem.js

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ type ResponderTimer = {|
5252
instance: ReactNativeEventResponderInstance,
5353
func: () => void,
5454
id: number,
55-
targetFiber: Fiber | null,
5655
timeStamp: number,
5756
|};
5857

@@ -78,7 +77,6 @@ let currentTimeStamp = 0;
7877
let currentTimers = new Map();
7978
let currentInstance: null | ReactNativeEventResponderInstance = null;
8079
let currentTimerIDCounter = 0;
81-
let currentTargetFiber: Fiber | null = null;
8280

8381
const eventResponderContext: ReactNativeResponderContext = {
8482
dispatchEvent(
@@ -198,7 +196,6 @@ const eventResponderContext: ReactNativeResponderContext = {
198196
instance: ((currentInstance: any): ReactNativeEventResponderInstance),
199197
func,
200198
id: timerId,
201-
targetFiber: currentTargetFiber,
202199
timeStamp: currentTimeStamp,
203200
});
204201
activeTimeouts.set(timerId, timeout);
@@ -220,23 +217,14 @@ const eventResponderContext: ReactNativeResponderContext = {
220217
validateResponderContext();
221218
return currentTimeStamp;
222219
},
223-
getCurrentTarget(): ReactNativeEventTarget | null {
220+
getResponderNode(): ReactNativeEventTarget | null {
224221
validateResponderContext();
225222
const responderFiber = ((currentInstance: any): ReactNativeEventResponderInstance)
226223
.fiber;
227-
let fiber = currentTargetFiber;
228-
let currentTarget = null;
229-
230-
while (fiber !== null) {
231-
if (fiber.tag === HostComponent) {
232-
currentTarget = fiber.stateNode;
233-
}
234-
if (fiber === responderFiber || fiber.alternate === responderFiber) {
235-
break;
236-
}
237-
fiber = fiber.return;
224+
if (responderFiber.tag === ScopeComponent) {
225+
return null;
238226
}
239-
return currentTarget;
227+
return responderFiber.stateNode;
240228
},
241229
};
242230

@@ -308,9 +296,8 @@ function processTimers(
308296
try {
309297
batchedEventUpdates(() => {
310298
for (let i = 0; i < timersArr.length; i++) {
311-
const {instance, func, id, targetFiber, timeStamp} = timersArr[i];
299+
const {instance, func, id, timeStamp} = timersArr[i];
312300
currentInstance = instance;
313-
currentTargetFiber = targetFiber;
314301
currentTimeStamp = timeStamp + delay;
315302
try {
316303
func();
@@ -323,7 +310,6 @@ function processTimers(
323310
currentTimers = null;
324311
currentInstance = null;
325312
currentTimeStamp = 0;
326-
currentTargetFiber = null;
327313
}
328314
}
329315

@@ -450,9 +436,7 @@ export function dispatchEventForResponderEventSystem(
450436
const previousInstance = currentInstance;
451437
const previousTimers = currentTimers;
452438
const previousTimeStamp = currentTimeStamp;
453-
const previousTargetFiber = currentTargetFiber;
454439
currentTimers = null;
455-
currentTargetFiber = targetFiber;
456440
// We might want to control timeStamp another way here
457441
currentTimeStamp = Date.now();
458442
try {
@@ -467,7 +451,6 @@ export function dispatchEventForResponderEventSystem(
467451
currentTimers = previousTimers;
468452
currentInstance = previousInstance;
469453
currentTimeStamp = previousTimeStamp;
470-
currentTargetFiber = previousTargetFiber;
471454
}
472455
}
473456

packages/react-native-renderer/src/ReactNativeTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ export type ReactNativeResponderContext = {
219219
setTimeout: (func: () => void, timeout: number) => number,
220220
clearTimeout: (timerId: number) => void,
221221
getTimeStamp: () => number,
222-
getCurrentTarget(): ReactNativeEventTarget | null,
222+
getResponderNode(): ReactNativeEventTarget | null,
223223
};
224224

225225
export type PointerType =

packages/shared/ReactDOMTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,5 @@ export type ReactDOMResponderContext = {
7575
continuePropagation(): void,
7676
// Used for controller components
7777
enqueueStateRestore(Element | Document): void,
78-
getCurrentTarget(): Element | null,
78+
getResponderNode(): Element | null,
7979
};

0 commit comments

Comments
 (0)