RN: Add RootTag Type to TurboModule

Summary:
Adds `RootTag` as a valid type for arguments and return types in TurboModules (on both Android and iOS).

This will enable us to change `RootTag` into an opaque type. There are two compelling reasons to do this:

- JavaScript will no longer be able to safely depend on `RootTag` being a number (which means we can change this in the future).
- Call sites using `unstable_RootTagContext` will can get a `RootTag`, but call sites using the legacy `context.rootTag` will not. This means the opaque type will give us a strategy for migrating away from legacy context and eventually making `unstable_RootTagContext` the only way to access `RootTag`.

Changelog:
[Internal]

(Note: this ignores all push blocking failures!)

Reviewed By: RSNara

Differential Revision: D21127170

fbshipit-source-id: baec9d7ad17b2f8c4527f1a84f604fc0d28b97eb
This commit is contained in:
Tim Yung
2020-04-21 19:15:54 -07:00
committed by Facebook GitHub Bot
parent a850d116dc
commit 5242ad931b
8 changed files with 37 additions and 1 deletions
@@ -11,6 +11,7 @@
'use strict';
import NativeSampleTurboModule from '../../../../Libraries/TurboModule/samples/NativeSampleTurboModule';
import type {RootTag} from '../../../../Libraries/ReactNative/RootTag';
import {
StyleSheet,
Text,
@@ -18,6 +19,7 @@ import {
FlatList,
Platform,
TouchableOpacity,
unstable_RootTagContext,
} from 'react-native';
import * as React from 'react';
@@ -33,6 +35,8 @@ type State = {|
|};
class SampleTurboModuleExample extends React.Component<{||}, State> {
static contextType: React$Context<RootTag> = unstable_RootTagContext;
state: State = {
testResults: {},
};
@@ -64,6 +68,7 @@ class SampleTurboModuleExample extends React.Component<{||}, State> {
]),
getObject: () =>
NativeSampleTurboModule.getObject({a: 1, b: 'foo', c: null}),
getRootTag: () => NativeSampleTurboModule.getRootTag(this.context),
getValue: () =>
NativeSampleTurboModule.getValue(5, 'test', {a: 1, b: 'foo'}),
};