簡體   English   中英

react-native:后退按鈕處理程序

[英]react-native: back button handler

我想檢測按下硬件后退按鈕時值發生了變化。

但是,在 useEffect 中使用 BackHandler,它不起作用。

這是我的代碼...

 useEffect(() => { BackHandler.addEventListener("hardwareBackPress", backAction); return () => { BackHandler.removeEventListener("hardwareBackPress", backAction) } },[]); const backAction = () => { BackActionAlert( navigation, addedImage.length > 0 || deletedImage.length > 0, 'ModifyDetail' ); return true; }; const BackActionAlert = (navigation, requireBackAlert, fromWhere) => { if (requireBackAlert) { Alert.alert( "warning", alertMessage(fromWhere), [ { text: 'NO', style: 'cancel', }, { text: 'OK', onPress: () => navigation.goBack() } ], { cancelable: true, } ); } else { navigation.goBack(); } };

在我的代碼中,當該組件安裝時,數組 addedImage 和 deletedImage 沒有元素,

所以,它返回假(我猜)

我該如何解決?

App.js所在的位置創建一個名為hooks的文件夾

hooks文件夾中,創建一個名為useBackHandler.js的文件

useBackHandler.js里面粘貼這個

import { useEffect } from "react";
import { BackHandler } from "react-native";

export function useBackHandler(handler) {
  useEffect(() => {
    BackHandler.addEventListener("hardwareBackPress", handler);

    return () => BackHandler.removeEventListener("hardwareBackPress", handler);
  }, [handler]);
}

然后像這樣在任何你想處理后推的地方使用它

import useBackHandler from "../hooks/useBackHandler";
// Make sure the import is correct


useBackHandler(() => {
  if (want_to_do_something) {
    // Do Something
    return true;
  }
  return false;
});

所以在你的情況下,它將像這樣使用

useBackHandler(() => {
  if (addedImage.length > 0 || deletedImage.length > 0) {
    BackActionAlert(navigation, 'ModifyDetail');
    return true;
  }
  return false;
});

const BackActionAlert = (navigation, fromWhere) => {
  Alert.alert(
    'warning',
    alertMessage(fromWhere),
    [
      {
        text: 'NO',
        style: 'cancel',
      },
      {
        text: 'OK',
        onPress: () => navigation.goBack(),
      },
    ],
    {
      cancelable: true,
    }
  );
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM