[RT] Minor clean up (#11122)
* Rename rootNodeID -> tag * Process RT props before forwarding them along This is needed because the children prop can't be serialized. Also, some minor placeholder for events.
Sebastian Markbåge committed
Oct 5, 2017 at 18:32 UTC
7ec46e0fb0c8a865f0a3c87d563ceb46b05310ef
2 files changed
+24
-6
src/renderers/native-rt/ReactNativeRTEventEmitter.js
+2
-4
@@ -21,14 +21,12 @@ var ReactNativeRTEventEmitter = {
21
* @param {object} nativeEventParam Object passed from native.
22
*/
23
receiveEvent: function(
24
- rootNodeID: number,
24
+ tag: number,
25
topLevelType: string,
26
nativeEventParam: Object,
27
) {
28
var nativeEvent = nativeEventParam;
29
- var props = ReactNativeRTComponentTree.getFiberCurrentPropsFromTag(
30
- rootNodeID,
31
- );
29
+ var props = ReactNativeRTComponentTree.getFiberCurrentPropsFromTag(tag);
30
if (props == null) {
31
return;
32
}
src/renderers/native-rt/ReactNativeRTFiberRenderer.js
+22
-2
@@ -25,6 +25,26 @@ export type TextInstance = number;
25
26
const {precacheFiberNode, updateFiberProps} = ReactNativeRTComponentTree;
27
28
+function processProps(instance: number, props: Props): Object {
29
+ const propsPayload = {};
30
+ for (var key in props) {
31
+ if (key === 'children') {
32
+ // Skip special case.
33
+ continue;
34
+ }
35
+ var value = props[key];
36
+ if (typeof value === 'function') {
37
+ value = {
38
+ style: 'rt-event',
39
+ event: key,
40
+ tag: instance,
41
+ };
42
+ }
43
+ propsPayload[key] = value;
44
+ }
45
+ return propsPayload;
46
+}
47
+
48
const NativeRTRenderer = ReactFiberReconciler({
49
appendChild(parentInstance: Instance, child: Instance | TextInstance): void {
50
RTManager.appendChild(parentInstance, child);
@@ -70,7 +90,7 @@ const NativeRTRenderer = ReactFiberReconciler({
90
internalInstanceHandle: Object,
91
): void {
92
updateFiberProps(instance, newProps);
73
- RTManager.updateNode(instance, newProps);
93
+ RTManager.updateNode(instance, processProps(instance, newProps));
94
},
95
96
createInstance(
@@ -81,9 +101,9 @@ const NativeRTRenderer = ReactFiberReconciler({
101
internalInstanceHandle: Object,
102
): Instance {
103
const tag = ReactNativeRTTagHandles.allocateTag();
84
- RTManager.createNode(tag, type, props);
104
precacheFiberNode(internalInstanceHandle, tag);
105
updateFiberProps(tag, props);
106
+ RTManager.createNode(tag, type, processProps(tag, props));
107
return tag;
108
},
109