react-native - 防止用户在 android 上访问“Auth Loading Screen”
问题描述
在我的应用程序中(很可能像任何其他应用程序一样)我有一个加载屏幕,用于检查用户是否已登录。问题是,如果按下“返回”按钮,Android 上的用户现在有可能返回到该屏幕。我怎么可能避免用户这样做?
这就是我的代码:
const loadingStack = createSwitchNavigator({
Loading: {
screen: Loading
}
}, {
defaultNavigationOptions: {
unmountOnBlur: true,
headerMode: 'none',
gestureEnabled: false
}
}
);
export default createAppContainer(
createStackNavigator({
Loading: loadingStack,
App: {
screen: AppTabNavigator,
navigationOptions: {
gestureEnabled: false,
},
},
Auth: {
screen: AuthStack,
},
...
解决方案
我看到两个解决方案:
- 更改您的导航并选择切换导航。
createAppContainer(
createSwitchNavigator(
{
Loading: {
screen: Loading,
navigationOptions: {
headerMode: 'none',
}
},
App: {
screen: AppTabNavigator,
navigationOptions: {
gestureEnabled: false
}
},
Auth: {
screen: AuthStack
}
}
)
)
- 如果您想“享受” StackNavigator 的动画,当您从 Loading 导航到您的 App 时,您将用新视图替换当前视图。
//Example on your Loading Screen
this.props.navigation.replace({ routeName: "App" })
这会将您的加载屏幕视图替换为您的应用“视图”,当您返回时,您将不再被重定向到加载屏幕,因为它不再在堆栈中,它已被 App 替换。
编辑(回应评论,因为它太长了):
在这种情况下,如果你想在 Home 上做一个特殊的 backButton 管理,你可以使用React Native BackHandler。
例如,如果您希望在单击 backButton 时不发生任何事情,请添加一个 eventListener,它无论如何都会返回true:
import { BackHandler } from 'react-native'
...
componentDidMount() {
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true)
}
componentWillUnmount(){
this.backHandler.remove()
}
否则,如果您希望应用退出,例如:
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => BackHandler.exitApp())
推荐阅读
- azure-devops - 列出 Azure DevOps 中与两个标签之间的差异相关的项目
- scala - 如何获取(派生的)Spark DataFrame 的查询逻辑的 SQL 表示?
- php - 我可以为 laravel 中具有相同列的多个表创建迁移吗?
- firebase - Flutter Cloud Firestore 读取数据有参考
- javascript - 如何使用 Vuejs 中的每个字符验证密码字段?
- sql - IBD 文件需要导入 PHPMyAdmin
- prometheus - 使用 prometheus 查询从 node_cpu_info 获取 cpu 型号名称
- sql - 如何将数字转换为字符串,提取每个数字,再次将其转换为整数,然后在 SQL 中将它们加在一起(例如 1+2+3+4+5+6)?
- r - 根据属性过滤数据(data.frame)并将其分配给向量
- xamarin.forms - Xamarin Forms:在 TimePicker 中关闭时钟弹出后,UI 上显示的时间不同?