RootTag
RootTag 是分配给 React Native 界面的原生根视图的唯一标识符 — 即 Android 或 iOS 相应的 ReactRootView 或 RCTRootView 实例。简而言之,它是一个界面标识符。
何时使用 RootTag?
对于大多数 React Native 开发者来说,您可能不需要处理 RootTag。
RootTag 在应用程序渲染多个 React Native 根视图并且您需要根据界面差异化处理原生 API 调用时非常有用。例如,当应用程序使用原生导航并且每个屏幕都是一个独立的 React Native 根视图时。
在原生导航中,每个 React Native 根视图都渲染在平台的导航视图中(例如,Android 的 Activity,iOS 的 UINavigationViewController)。通过这种方式,您可以利用平台的导航范例,例如原生外观和感觉以及导航过渡。与原生导航 API 交互的功能可以通过原生模块暴露给 React Native。
例如,要更新屏幕的标题栏,您将调用导航模块的 API setTitle("Updated Title"),但它需要知道堆栈中哪个屏幕需要更新。此时需要 RootTag 来标识根视图及其宿主容器。
RootTag 的另一个用例是当您的应用程序需要根据其原始根视图将特定的 JavaScript 调用归因于原生时。需要 RootTag 来区分来自不同界面的调用的来源。
如何访问 RootTag... 如果您需要它
在 0.65 及更早版本中,通过旧版上下文访问 RootTag。为了让 React Native 为 React 18 及更高版本中的并发功能做好准备,我们正在通过 0.66 中的 RootTagContext 迁移到最新的Context API。0.65 版本同时支持旧版上下文和推荐的 RootTagContext,以便为开发者迁移其调用点提供时间。请参阅重大更改摘要。
如何通过 RootTagContext 访问 RootTag。
import {RootTagContext} from 'react-native';
import NativeAnalytics from 'native-analytics';
import NativeNavigation from 'native-navigation';
function ScreenA() {
const rootTag = useContext(RootTagContext);
const updateTitle = title => {
NativeNavigation.setTitle(rootTag, title);
};
const handleOneEvent = () => {
NativeAnalytics.logEvent(rootTag, 'one_event');
};
// ...
}
class ScreenB extends React.Component {
static contextType: typeof RootTagContext = RootTagContext;
updateTitle(title) {
NativeNavigation.setTitle(this.context, title);
}
handleOneEvent() {
NativeAnalytics.logEvent(this.context, 'one_event');
}
// ...
}
从 React 文档中了解有关类和钩子的 Context API 的更多信息。
0.65 版本中的重大更改
RootTagContext 以前的名称是 unstable_RootTagContext,在 0.65 版本中更改为 RootTagContext。请更新您代码库中所有对 unstable_RootTagContext 的使用。
0.66 版本中的重大更改
旧版上下文对 RootTag 的访问将被删除并替换为 RootTagContext。从 0.65 版本开始,我们鼓励开发者主动将 RootTag 的访问迁移到 RootTagContext。
未来计划
随着新的 React Native 架构的进展,RootTag 将会有未来的迭代,目的是保持 RootTag 类型的私有性,并防止 React Native 代码库中的频繁变动。请不要依赖 RootTag 当前别名为数字这一事实!如果您的应用程序依赖 RootTag,请留意我们的版本变更日志,您可以在此处找到。