跳至主内容
版本:0.80

RootTag

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

RootTag 是一个不透明标识符,用于标识 React Native 原生根视图——即 Android 的 ReactRootView 或 iOS 的 RCTRootView 实例。简而言之,它是界面(surface)的唯一标识符。

何时需要使用 RootTag?

对于大多数 React Native 开发者而言,通常无需直接处理 RootTag

当应用需要渲染多个 React Native 根视图,且需根据不同界面差异化处理原生 API 调用时,RootTag 会非常有用。典型场景是使用原生导航的应用,其中每个屏幕都是独立的 React Native 根视图。

在原生导航中,每个 React Native 根视图都渲染在平台的导航容器内(例如 Android 的 Activity 或 iOS 的 UINavigationViewController)。通过这种方式,您可以利用平台的导航特性(如原生视觉效果和转场动画)。这些与原生导航 API 交互的功能可通过原生模块暴露给 React Native。

例如,要更新屏幕标题栏时,您需调用导航模块的 API setTitle("Updated Title"),但该 API 需要知道具体更新哪个屏幕。此时就需要 RootTag 来标识根视图及其宿主容器。

RootTag 的另一个使用场景是:当应用需要根据来源根视图区分 JavaScript 调用的原生响应目标时,RootTag 可用于识别不同界面的调用来源。

如何获取 RootTag(如需使用)

在 0.65 及更早版本中,RootTag 通过传统 Context 获取。为支持 React 18 及更高版本的并发特性,我们将在 0.66 迁移至基于 RootTagContext 的现代 Context API。0.65 版本同时支持传统 Context 和推荐的 RootTagContext,以便开发者逐步迁移调用点。请参阅破坏性变更摘要。

如何通过 RootTagContext 获取 RootTag

js
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');
}

// ...
}

关于 Context API 在类组件Hook中的用法,请参阅 React 文档。

0.65 版本的破坏性变更

RootTagContext 在 0.65 版本前名为 unstable_RootTagContext,并在 0.65 版本中更名为 RootTagContext。请升级代码库中所有 unstable_RootTagContext 的引用。

0.66 版本的破坏性变更

通过传统 Context 获取 RootTag 的方式将被移除,由 RootTagContext 完全替代。从 0.65 开始,我们建议开发者主动迁移 RootTag 访问方式至 RootTagContext

未来计划

随着新 React Native 架构的推进,RootTag 将进行迭代升级,同时保持 RootTag 类型的不透明性以避免破坏性变更。请勿依赖 RootTag 当前是数值类型这一事实! 如果您的应用依赖 RootTag,请持续关注版本更新日志