RootTag
RootTag
是一個不透明的識別符,分配給您的 React Native 表面的原生根視圖 — 也就是 Android 或 iOS 的 ReactRootView
或 RCTRootView
實例。簡而言之,它是一個表面識別符。
何時使用 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
。
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,請密切關注我們的版本變更日誌,您可以在這裡找到。