dillon1000/react
Commit
Browse files [react-native-renderer] EventTarget-based event dispatching (#36253)
## Summary Set up the experiment to migrate event dispatching in the React Native renderer to be based on the native EventTarget API. Behind the `enableNativeEventTargetEventDispatching` flag, events are dispatched through `dispatchTrustedEvent` instead of the legacy plugin system. Regular event handler props are NOT registered via addEventListener at commit time. Instead, a hook on EventTarget (`EVENT_TARGET_GET_DECLARATIVE_LISTENER_KEY`) extracts handlers from `canonical.currentProps` at dispatch time, shifting cost from every render to only when events fire. The hook is overridden in ReactNativeElement to look up the prop name via a reverse mapping from event names (built lazily from the view config registry). Responder events bypass EventTarget entirely. `negotiateResponder` walks the fiber tree directly (capture then bubble phase), calling handlers from `canonical.currentProps` and checking return values inline. Lifecycle events (`responderGrant`, `responderMove`, etc.) call handlers directly from props and inspect return values — `onResponderGrant` returning `true` blocks native responder, `onResponderTerminationRequest` returning `false` refuses termination. This eliminates all commit-time cost for responder events (no wrappers, no addEventListener, no `responderWrappers` on canonical). ## How did you test this change? Flow Tested e2e in RN using Fantom tests (that will land after this).
Changed paths10 files
First-parent comparison.eslintrc.js ModifiedA packages/react-native-renderer/src/LegacySyntheticEvent.js AddedM packages/react-native-renderer/src/ReactFabricEventEmitter.js ModifiedM packages/react-native-renderer/src/ReactNativeEventEmitter.js ModifiedA packages/react-native-renderer/src/ReactNativeEventTypeMapping.js AddedA packages/react-native-renderer/src/ReactNativeFeatureFlags.js AddedA packages/react-native-renderer/src/ReactNativeResponder.js AddedM packages/react-native-renderer/src/legacy-events/PluginModuleType.js ModifiedM scripts/flow/react-native-host-hooks.js ModifiedM scripts/rollup/validate/eslintrc.rn.js ModifiedPatch
Files changed
Rendering syntax-highlighted changes…