跳到主要內容

RootTag

RootTag 是一個不透明的識別符,分配給您的 React Native 表面的原生根視圖 — 也就是 Android 或 iOS 的 ReactRootViewRCTRootView 實例。簡而言之,它是一個表面識別符。

何時使用 RootTag?

對於大多數 React Native 開發者來說,您可能不需要處理 RootTag

當應用程式渲染多個 React Native 根視圖,並且您需要根據表面以不同方式處理原生 API 呼叫時,RootTag 非常有用。一個例子是當應用程式使用原生導航,並且每個螢幕都是一個單獨的 React Native 根視圖時。

在原生導航中,每個 React Native 根視圖都在平台的導航視圖中渲染(例如,Android 的 Activity,iOS 的 UINavigationViewController)。這樣一來,您就能夠利用平台的導航範例,例如原生外觀和風格以及導航過渡效果。與原生導航 API 互動的功能可以透過原生模組暴露給 React Native。

例如,要更新螢幕的標題欄,您需要呼叫導航模組的 API setTitle("Updated Title"),但它需要知道要更新堆疊中的哪個螢幕。在這裡,RootTag 是必要的,以識別根視圖及其託管容器。

RootTag 的另一個用例是當您的應用程式需要根據其原始根視圖將特定的 JavaScript 呼叫歸因於原生時。RootTag 是區分來自不同表面的呼叫來源所必需的。

如何存取 RootTag... 如果您需要它

在 0.65 及更早版本中,RootTag 是透過舊版 Context 存取的。為了讓 React Native 為 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');
}

// ...
}

從 React 文件中瞭解更多關於 類別Hook 的 Context API 資訊。

0.65 版本中的重大變更

RootTagContext 以前被命名為 unstable_RootTagContext,並在 0.65 版本中變更為 RootTagContext。請更新您的程式碼庫中任何 unstable_RootTagContext 的用法。

0.66 版本中的重大變更

RootTag 的舊版 Context 存取將被移除,並由 RootTagContext 取代。從 0.65 版本開始,我們鼓勵開發人員主動將 RootTag 存取遷移到 RootTagContext

未來計畫

隨著新的 React Native 架構不斷發展,未來將對 RootTag 進行迭代,目的是保持 RootTag 類型的不透明性,並防止 React Native 程式碼庫中的混亂。請不要依賴 RootTag 目前別名為數字的事實!如果您的應用程式依賴 RootTag,請密切關注我們的版本變更日誌,您可以在這裡找到。