javascript - 如何在一个屏幕而不是整个应用程序中处理退出应用程序 - React Native?

标签 javascript android reactjs react-native react-navigation

我对 BackHandler 有一些问题,问题是

当运行应用程序并转到注册屏幕并触摸我手机的背面时,他们将运行该功能并显示警报以确认,但现在当我转到任何其他屏幕并触摸背面时,他们会我需要在每次返回 BackHandler.exitApp(); 时返回到上一个屏幕;运行,虽然我写如果路由名称是 SignUp 只是退出应用程序而不是其他屏幕

这是我的代码

注册

    import React from "react";
    import {
      Text,
      TextInput,
      ActivityIndicator,
      View,
      KeyboardAvoidingView,
      ScrollView,
      Image,
      TouchableOpacity,
      BackHandler,
      Alert
    } from "react-native";
    export default class signUp extends React.Component {
      constructor(props) {
        super(props);

      }

      componentDidMount() {
        BackHandler.addEventListener("hardwareBackPress", this.backPressed);
      }

      componentWillUnmount() {
        BackHandler.removeEventListener("hardwareBackPress", this.backPressed);
      }
      backPressed = () => {
    let { routeName } = this.props.navigation.state;
    console.log("route is :  " + routeName);

    if (routeName == "SignUp") {
      console.log("ROUTE :  " + routeName);
      Alert.alert(
        "Exit App",
        "Do you want to exit?",
        [
          {
            text: "No",
            onPress: () => console.log("Cancel Pressed"),
            style: "cancel"
          },
          { text: "Yes", onPress: () => BackHandler.exitApp() }
        ],
        { cancelable: false }
      );
      return true;
    } else {
      return false;
    }
  };

      render() {....}
    }

路线

import { createStackNavigator, createAppContainer } from "react-navigation";
import React from "react";
import { View } from "react-native";
import Splash from "../screens/Splash";
import Home from "../screens/Home";
import SignUp from "../screens/SignUp";
import SignIn from "../screens/SignIn";
import ForgetPassword from "../screens/ForgetPassword";

const Routes = createStackNavigator(
  {
    Splash: {
      screen: Splash,
      navigationOptions: {
        header: null
      }
    },
    SignUp: {
      screen: SignUp,
      navigationOptions: () => ({
        // header: null
        title: "Sign Up",
        headerLeft: null,
        headerTintColor: "#fc0301",
        headerStyle: {
          borderBottomColor: "white"
        },
        headerTitleStyle: {
          color: "#fc0301",
          textAlign: "center",
          flex: 1,
          elevation: 0,
          fontSize: 25,
          justifyContent: "center"
        }
      })
    },
    SignIn: {
      screen: SignIn,
      navigationOptions: {
        title: "Sign In",
        headerRight: <View />,
        headerTintColor: "#fc0301",
        headerStyle: {
          borderBottomColor: "white"
        },
        headerTitleStyle: {
          color: "#fc0301",
          textAlign: "center",
          flex: 1,
          elevation: 0,
          fontSize: 25,
          justifyContent: "center"
        }
      }
    },
    ForgetPassword: {
      screen: ForgetPassword,
      navigationOptions: {
        header: null
      }
    },
    Home: {
      screen: Home,
      navigationOptions: {
        header: null
      }
    }
  },
  {
    initialRouteName: "Splash"
  }
);

export default createAppContainer(Routes);

最佳答案

您可以在调用警报之前检查屏幕是否已聚焦,而不是检查导航中的 routeName

更新后的代码可能如下所示。

if (this.props.navigation.isFocused()) {
    Alert.alert(
    "Exit App",
    "Do you want to exit?",
    [
      {
        text: "No",
        onPress: () => console.log("Cancel Pressed"),
        style: "cancel"
      },
      { text: "Yes", onPress: () => BackHandler.exitApp() }
    ],
    { cancelable: false }
    );
}

关于javascript - 如何在一个屏幕而不是整个应用程序中处理退出应用程序 - React Native?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55306718/

相关文章:

javascript - setState 未被调用

javascript - Node ,如何在 Node/express 应用程序上发送响应 header ?

java - 来自 Firebase 的纬度和经度坐标不正确,并且所有帖子的纬度和经度坐标均相同

Android open Accessory for microcontrollers

android - 线性布局顺序在某些设备上是相反的

javascript - React(ES6类)中哪种绑定(bind)上下文的方法更好

javascript - 在 Babel 7 中包含一些 node_modules 目录

javascript - 无法使用 ruby​​ (link_to) 方法使用 Bootstrap 可切换选项卡

javascript - 在 Chrome 上保存和恢复设置

javascript - 当点击没有在内容之外启动时防止模态关闭?