我在BackHandler上有问题,问题是
当运行该应用程序并转到“注册”屏幕并在我的手机上触摸后方时,他们将运行该功能并显示警报以进行确认,但是现在当我转到任何其他屏幕并触摸后方时,我需要返回到每个BackBack.exitApp()上的上一个屏幕;运行,尽管我写的是routname是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 }
);
}