reactjs - React Navigation:实现注销导航的最佳方式?
问题描述
我react-navigation@4.0.10
在我的 React Native 应用程序中使用,并且有一个Login
屏幕和两个TabNavigator
屏幕。从Login
屏幕登录会将我带到TabNavigator_1
,如果我从中注销,TabNavigator_1
我只需使用this.props.navigation.goBack()
. 问题是,要TabNavigator_2
点击一个按钮,TabNavigator_1
其中 triggers this.props.navigation.navigate('TabNavigator_2')
,所以TabNavigator_2
现在位于堆栈顶部,调用this.props.navigation.goBack()
只会带我回到TabNavigator_1
而不是Login
.
解决此问题的最佳方法是什么,以便单击并Log out
带我回到?TabNavigator_1
TabNavigator_2
Login
解决方案
使用
this.props.navigation.goBack()
返回登录屏幕对我来说是非常糟糕的模式。
我推荐的模式:
1)成功登录后,您将登录用户(仅 id 和 Essentials 凭据)存储在您的 asyncstorage 中。
2)按下注销按钮后,您从 asyncStorage 中清除该凭据。
在您的初始屏幕中
检查 asyncStorage 中是否有登录用户信息
如果是 -> 进入 tabNavigator 屏幕
else -> 进入登录界面
粗略演示
<Stack.Navigator>
{isLoggedIn ? (
<Stack.Screen name="Home" component={TabNavigator} />
) : (
<Stack.Screen name="SignIn" component={LogInScreen} />
)}
</Stack.Navigator>
推荐阅读
- javascript - 如何在导航屏幕组件中传递一个函数来更新状态 - React Native
- javascript - nuxt router.js 自动更新如何防止这种情况?
- javascript - 我使用 js 来创建我的命令语法,现在我该如何使用它?
- javascript - 如何使用 React 获取一个部门的 innerHTML
- gml - GameMaker Studio 2 - 无需编程即可将对象更改为不同的精灵 (GML)
- python-3.x - Python New Relic Docker - python 版本不同
- c - C 编程如何在没有标头的情况下工作?
- php - 即使未到考试日期,学生也可以开始考试
- python - 运行所有测试后的 Pytest 引发 AttributeError:“ReprExceptionInfo”对象没有属性“rsplit”
- f# - 有人可以在 F# 中阐明单子/计算表达式及其语法吗