跳到主要內容

BackHandler

Backhandler API 偵測用於返回導航的硬體按鈕按下,讓您註冊系統返回動作的事件監聽器,並讓您控制應用程式的回應方式。它僅適用於 Android。

事件訂閱會以相反的順序呼叫(即,最後註冊的訂閱會先呼叫)。

  • 如果一個訂閱返回 true, 則不會呼叫較早註冊的訂閱。
  • 如果沒有訂閱返回 true 或沒有註冊任何訂閱, 它會以程式設計方式調用預設的返回按鈕功能以退出應用程式。

模組使用者注意事項: 如果您的應用程式顯示已開啟的 ModalBackHandler 將不會發布任何事件(請參閱 Modal 文件)。

模式

tsx
const subscription = BackHandler.addEventListener(
'hardwareBackPress',
function () {
/**
* this.onMainScreen and this.goBack are just examples,
* you need to use your own implementation here.
*
* Typically you would use the navigator here to go to the last state.
*/

if (!this.onMainScreen()) {
this.goBack();
/**
* When true is returned the event will not be bubbled up
* & no other back action will execute
*/
return true;
}
/**
* Returning false will let the event to bubble up & let other event listeners
* or the system's default back action to be executed.
*/
return false;
},
);

// Unsubscribe the listener on unmount
subscription.remove();

範例

以下範例實作了一個情境,您可以在其中確認使用者是否要退出應用程式

BackHandler.addEventListener 建立一個事件監聽器,並返回一個 NativeEventSubscription 物件,該物件應使用 NativeEventSubscription.remove 方法清除。

與 React Navigation 搭配使用

如果您使用 React Navigation 在不同螢幕之間導航,您可以參考他們關於 自訂 Android 返回按鈕行為 的指南

Backhandler Hook

React Native Hooks 有一個不錯的 useBackHandler Hook,它將簡化設定事件監聽器的過程。


參考文獻

方法

addEventListener()

tsx
static addEventListener(
eventName: BackPressEventName,
handler: () => boolean | null | undefined,
): NativeEventSubscription;

exitApp()

tsx
static exitApp();