在Android中
ReactRootView.onTouchEvent()
JSTouchDispatcher.handleTouchEvent()
EventDispatcher.dispatchEvent()
mCurrentFrameCallback.maybePostFromNonUI()
DispatchEventsRunnable.run()
event.dispatch(mRCTEventEmitter)
mRCTEventEmitter = mReactContext.getJSModule(RCTEventEmitter.class);
这个是一个JS module。
在RN中
react-native/Libraries/Renderer/oss/ReactNativeRenderer-prod.js
RCTEventEmitter.register(ReactNativeEventEmitter);
其中react-native/Libraries/EventEmitter /RCTEventEmitter.js会进行如下操作:
const RCTEventEmitter = {
register(eventEmitter: any) {
BatchedBridge.registerCallableModule(
'RCTEventEmitter',
eventEmitter
);
}
};
所以最终事件处理逻辑是在ReactNativeRenderer-prod.js这个文件中的receiveTouches函数。
receiveTouches
_receiveRootNodeIDEvent
handleTopLevel
extractEvents
这里有一篇文章讲到了RN iOS中touch事件的传递。
react native事件及手势响应系统
网友评论