diff --git a/packages/react-dom/src/events/DOMModernPluginEventSystem.js b/packages/react-dom/src/events/DOMModernPluginEventSystem.js index 61c707bad6a13..b8c07cc4e914f 100644 --- a/packages/react-dom/src/events/DOMModernPluginEventSystem.js +++ b/packages/react-dom/src/events/DOMModernPluginEventSystem.js @@ -12,6 +12,7 @@ import type {DOMTopLevelEventType} from 'legacy-events/TopLevelEventTypes'; import type {EventSystemFlags} from 'legacy-events/EventSystemFlags'; import type {Fiber} from 'react-reconciler/src/ReactFiber'; import type {PluginModule} from 'legacy-events/PluginModuleType'; +import type {ReactSyntheticEvent} from 'legacy-events/ReactSyntheticEventType'; import {registrationNameDependencies} from 'legacy-events/EventPluginRegistry'; import {batchedEventUpdates} from 'legacy-events/ReactGenericBatching'; @@ -102,11 +103,11 @@ function dispatchEventsForPlugins( rootContainer: Element | Document, ): void { const nativeEventTarget = getEventTarget(nativeEvent); - const syntheticEvents = []; + const syntheticEvents: Array = []; for (let i = 0; i < plugins.length; i++) { const possiblePlugin: PluginModule = plugins[i]; - if (possiblePlugin) { + if (possiblePlugin !== undefined) { const extractedEvents = possiblePlugin.extractEvents( topLevelType, targetInst, @@ -115,12 +116,13 @@ function dispatchEventsForPlugins( eventSystemFlags, rootContainer, ); - if (extractedEvents) { - if (isArray(extractedEvents)) { - syntheticEvents.push(...(extractedEvents: any)); - } else { - syntheticEvents.push(extractedEvents); - } + if (isArray(extractedEvents)) { + // Flow complains about @@iterator being missing in ReactSyntheticEvent, + // so we cast to avoid the Flow error. + const arrOfExtractedEvents = ((extractedEvents: any): Array); + syntheticEvents.push(...arrOfExtractedEvents); + } else if (extractedEvents != null) { + syntheticEvents.push(extractedEvents); } } } diff --git a/packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js b/packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js index 5a82c1d238237..66c670b7ca3ec 100644 --- a/packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js +++ b/packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js @@ -13,16 +13,12 @@ let React; let ReactFeatureFlags; let ReactDOM; -function dispatchEvent(element, type) { +function dispatchClickEvent(element) { const event = document.createEvent('Event'); - event.initEvent(type, true, true); + event.initEvent('click', true, true); element.dispatchEvent(event); } -function dispatchClickEvent(element) { - dispatchEvent(element, 'click'); -} - describe('DOMModernPluginEventSystem', () => { let container; diff --git a/packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js b/packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js index 789a4f25061c5..076ef7126aa53 100644 --- a/packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js +++ b/packages/react-native-renderer/src/ReactNativeBridgeEventPlugin.js @@ -34,7 +34,7 @@ const ReactNativeBridgeEventPlugin = { nativeEvent: AnyNativeEvent, nativeEventTarget: null | Object, eventSystemFlags: EventSystemFlags, - ): ?Object { + ): Object | null { if (targetInst == null) { // Probably a node belonging to another renderer's tree. return null;