react-native - 在反应导航 5.x 中禁用导航回登录/注册屏幕
问题描述
我正在使用反应导航 5
我的结构是这样的:
ROOT (STACK)
|-- LoginStack (STACK)
| |-- Login (SCREEN) -> when successful navigate to "Mainapp_stack"
| +-- Register (SCREEN) -> after registration, navigate to "Mainapp_stack"
|
+-- Mainapp_stack (STACK)
|-- Dashboard (SCREEN)
|-- MyProfile (SCREEN)
通过检查 usertoken 就可以了,我可以导航到主应用程序堆栈,但是,
在登录/注册过程中的第一次如何防止用户在 react-navigation 5.x 中成功登录/注册后导航回来
应用程序.js
<NavigationContainer>
<Stack.Navigator>
{this.state.token_available ?
<Stack.Screen
name="Mainapp_stack"
component={Mainapp_stack}
options={{headerShown: false}}
/>
:
<>
<Stack.Screen
name="TeacherLogin"
component={TeacherLogin}
/>
<Stack.Screen
name="Info"
component={Info}
/>
<Stack.Screen
name="Mainapp_stack"
component={Mainapp_stack}
/>
</>
}
</Stack.Navigator>
</NavigationContainer>
Mainapp_stack.js
<Stack.Navigator initialRouteName='Dashboard'>
<Stack.Screen
name="Dashboard"
component={Dashboard}
// options={{headerShown: true}}
/>
</Stack.Navigator>
现在,当我完成登录/注册时,如果按下硬件后退按钮,我不想返回导航。我的变量token_available
在 App.js 中,我没有使用 redux。
那么,我该如何解决呢?
解决方案
在您的主屏幕中使用以下代码:
import { useFocusEffect } from "@react-navigation/native";
useFocusEffect(
React.useCallback(() => {
const onBackPress = () => {
Alert.alert("Hold on!", "Are you sure you want to Exit?", [
{
text: "Cancel",
onPress: () => null,
style: "cancel"
},
{ text: "YES", onPress: () => BackHandler.exitApp() }
]);
return true;
};
BackHandler.addEventListener("hardwareBackPress", onBackPress);
return () =>
BackHandler.removeEventListener("hardwareBackPress", onBackPress);
}, []));
在此处阅读更多内容:React 导航文档
推荐阅读
- android - (React Native) 显示api图片和文件下载
- c++ - 为什么 ffmpeg 中的 AV_PARSER_PARSE2 返回 HEVC 视频的空 AVPacket 数据?
- c# - 在 ASP.NET Core Web.API 中拦截调用者语言
- javascript - 将 vanilla/jquery 元素添加到 React 组件
- jquery - 如何定位被点击元素的最高父级
- amazon-web-services - 如何测试 AWS EC2 安全组
- r - 如何打印数据框列表的前六个值
- javascript - 将本地 mp4 文件转换为 fileURL 以进行视频反应
- python - 组合函数以产生所需的整数输出
- php - PHP - 具有 HEX 值的 var:操作错误