diff --git a/src/renderers/native-rt/ReactNativeRTEventEmitter.js b/src/renderers/native-rt/ReactNativeRTEventEmitter.js index c3a5a53960..3aa19cf2e6 100644 --- a/src/renderers/native-rt/ReactNativeRTEventEmitter.js +++ b/src/renderers/native-rt/ReactNativeRTEventEmitter.js @@ -21,14 +21,12 @@ var ReactNativeRTEventEmitter = { * @param {object} nativeEventParam Object passed from native. */ receiveEvent: function( - rootNodeID: number, + tag: number, topLevelType: string, nativeEventParam: Object, ) { var nativeEvent = nativeEventParam; - var props = ReactNativeRTComponentTree.getFiberCurrentPropsFromTag( - rootNodeID, - ); + var props = ReactNativeRTComponentTree.getFiberCurrentPropsFromTag(tag); if (props == null) { return; } diff --git a/src/renderers/native-rt/ReactNativeRTFiberRenderer.js b/src/renderers/native-rt/ReactNativeRTFiberRenderer.js index 12d55f1414..7fe91d5b4e 100644 --- a/src/renderers/native-rt/ReactNativeRTFiberRenderer.js +++ b/src/renderers/native-rt/ReactNativeRTFiberRenderer.js @@ -25,6 +25,26 @@ export type TextInstance = number; const {precacheFiberNode, updateFiberProps} = ReactNativeRTComponentTree; +function processProps(instance: number, props: Props): Object { + const propsPayload = {}; + for (var key in props) { + if (key === 'children') { + // Skip special case. + continue; + } + var value = props[key]; + if (typeof value === 'function') { + value = { + style: 'rt-event', + event: key, + tag: instance, + }; + } + propsPayload[key] = value; + } + return propsPayload; +} + const NativeRTRenderer = ReactFiberReconciler({ appendChild(parentInstance: Instance, child: Instance | TextInstance): void { RTManager.appendChild(parentInstance, child); @@ -70,7 +90,7 @@ const NativeRTRenderer = ReactFiberReconciler({ internalInstanceHandle: Object, ): void { updateFiberProps(instance, newProps); - RTManager.updateNode(instance, newProps); + RTManager.updateNode(instance, processProps(instance, newProps)); }, createInstance( @@ -81,9 +101,9 @@ const NativeRTRenderer = ReactFiberReconciler({ internalInstanceHandle: Object, ): Instance { const tag = ReactNativeRTTagHandles.allocateTag(); - RTManager.createNode(tag, type, props); precacheFiberNode(internalInstanceHandle, tag); updateFiberProps(tag, props); + RTManager.createNode(tag, type, processProps(tag, props)); return tag; },