@@ -12,12 +12,7 @@ import {
1212 PASSIVE_NOT_SUPPORTED ,
1313} from 'events/EventSystemFlags' ;
1414import type { AnyNativeEvent } from 'events/PluginModuleType' ;
15- import {
16- HostComponent ,
17- FunctionComponent ,
18- MemoComponent ,
19- ForwardRef ,
20- } from 'shared/ReactWorkTags' ;
15+ import { HostComponent } from 'shared/ReactWorkTags' ;
2116import type { EventPriority } from 'shared/ReactTypes' ;
2217import type {
2318 ReactDOMEventResponder ,
@@ -67,7 +62,7 @@ export function setListenToResponderEventTypes(
6762}
6863
6964type EventQueueItem = { |
70- listeners : Array < ( val : any ) => void > ,
65+ listener : ( val : any ) => void ,
7166 value : any ,
7267| } ;
7368type EventQueue = Array < EventQueueItem > ;
@@ -103,24 +98,18 @@ let currentDocument: null | Document = null;
10398
10499const eventResponderContext: ReactDOMResponderContext = {
105100 dispatchEvent (
106- eventProp : string ,
107101 eventValue : any ,
102+ eventListener : any => void ,
108103 eventPriority : EventPriority ,
109104 ) : void {
110105 validateResponderContext ( ) ;
111106 validateEventValue ( eventValue ) ;
112107 if ( eventPriority < currentEventQueuePriority ) {
113108 currentEventQueuePriority = eventPriority ;
114109 }
115- const responderInstance = ( ( currentInstance : any ) : ReactDOMEventResponderInstance ) ;
116- const target = responderInstance . fiber ;
117- const responder = responderInstance . responder ;
118- const listeners = collectListeners ( eventProp , responder , target ) ;
119- if ( listeners . length !== 0 ) {
120- ( ( currentEventQueue : any ) : EventQueue ) . push (
121- createEventQueueItem ( eventValue , listeners ) ,
122- ) ;
123- }
110+ ( ( currentEventQueue : any ) : EventQueue ) . push (
111+ createEventQueueItem ( eventValue , eventListener ) ,
112+ ) ;
124113 } ,
125114 isTargetWithinResponder(target: Element | Document): boolean {
126115 validateResponderContext ( ) ;
@@ -392,11 +381,11 @@ function collectFocusableElements(
392381
393382function createEventQueueItem (
394383 value : any ,
395- listeners : Array < ( val : any ) => void > ,
384+ listener : ( val : any ) => void ,
396385) : EventQueueItem {
397386 return {
398387 value,
399- listeners ,
388+ listener ,
400389 } ;
401390}
402391
@@ -519,70 +508,11 @@ function createDOMResponderEvent(
519508 } ;
520509}
521510
522- function collectListeners (
523- eventProp : string ,
524- eventResponder : ReactDOMEventResponder ,
525- target : Fiber ,
526- ) : Array < ( any ) => void > {
527- const eventListeners = [ ] ;
528- let node = target . return ;
529- nodeTraversal : while ( node !== null ) {
530- switch ( node . tag ) {
531- case HostComponent: {
532- const dependencies = node . dependencies ;
533-
534- if ( dependencies !== null ) {
535- const respondersMap = dependencies . responders ;
536-
537- if ( respondersMap !== null && respondersMap . has ( eventResponder ) ) {
538- break nodeTraversal;
539- }
540- }
541- break ;
542- }
543- case FunctionComponent:
544- case MemoComponent:
545- case ForwardRef: {
546- const dependencies = node . dependencies ;
547-
548- if ( dependencies !== null ) {
549- const listeners = dependencies . listeners ;
550-
551- if ( listeners !== null ) {
552- for (
553- let s = 0 , listenersLength = listeners . length ;
554- s < listenersLength ;
555- s ++
556- ) {
557- const listener = listeners [ s ] ;
558- const { responder, props} = listener ;
559- const listenerFunc = props [ eventProp ] ;
560-
561- if (
562- responder === eventResponder &&
563- typeof listenerFunc === 'function'
564- ) {
565- eventListeners . push ( listenerFunc ) ;
566- }
567- }
568- }
569- }
570- }
571- }
572- node = node . return ;
573- }
574- return eventListeners ;
575- }
576-
577511function processEvents ( eventQueue : EventQueue ) : void {
578512 for ( let i = 0 , length = eventQueue . length ; i < length ; i ++ ) {
579- const { value , listeners } = eventQueue[i];
580- for (let s = 0, length2 = listeners.length; s < length2 ; s ++ ) {
581- const listener = listeners [ s ] ;
582- const type =
583- typeof value === 'object' && value !== null ? value . type : '' ;
584- invokeGuardedCallbackAndCatchFirstError ( type , listener , undefined , value ) ;
585- }
513+ const { value, listener} = eventQueue [ i ] ;
514+ const type = typeof value === 'object' && value !== null ? value . type : '' ;
515+ invokeGuardedCallbackAndCatchFirstError ( type , listener , undefined , value ) ;
586516 }
587517}
588518
@@ -663,14 +593,14 @@ function traverseAndHandleEventResponderInstances(
663593 // - Bubble target responder phase
664594 // - Root responder phase
665595
596+ const visitedResponders = new Set ( ) ;
666597 const responderEvent = createDOMResponderEvent (
667598 topLevelType ,
668599 nativeEvent ,
669600 nativeEventTarget ,
670601 isPassiveEvent ,
671602 isPassiveSupported ,
672603 ) ;
673- const visitedResponders = new Set ( ) ;
674604 let node = targetFiber ;
675605 while ( node !== null ) {
676606 const { dependencies, tag} = node ;
@@ -687,8 +617,8 @@ function traverseAndHandleEventResponderInstances(
687617 ! visitedResponders . has ( responder ) &&
688618 validateResponderTargetEventTypes ( eventType , responder )
689619 ) {
690- const onEvent = responder . onEvent ;
691620 visitedResponders . add ( responder ) ;
621+ const onEvent = responder . onEvent ;
692622 if ( onEvent !== null ) {
693623 currentInstance = responderInstance ;
694624 responderEvent . responderTarget = ( ( target : any ) :
0 commit comments