BackHandler
Backhandler API 偵測用於返回導航的硬體按鈕按下,讓您註冊系統返回動作的事件監聽器,並讓您控制應用程式的回應方式。它僅適用於 Android。
事件訂閱會以相反的順序呼叫(即,最後註冊的訂閱會先呼叫)。
- 如果一個訂閱返回 true, 則不會呼叫較早註冊的訂閱。
- 如果沒有訂閱返回 true 或沒有註冊任何訂閱, 它會以程式設計方式調用預設的返回按鈕功能以退出應用程式。
模組使用者注意事項: 如果您的應用程式顯示已開啟的
Modal
,BackHandler
將不會發布任何事件(請參閱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();