我正在制作一个反应原生的移动应用程序,我有一个带有注销按钮的导航抽屉。我知道如何使用props.navigation.navigate('Login')
从那里导航到登录屏幕,但问题是如果用户这样做,他们仍然可以从登录屏幕打开抽屉并导航回其他屏幕之一,或者按回Android上的按钮。
如果用户来自另一个页面,然后禁用打开的抽屉按钮,我想我可以在登录屏幕上进行检查,但这看起来有点像黑客。我想知道是否有一个正确的方法来做到这一点,也许是为了在登录时重置堆栈,我不确定。
你的实施并不好。从您提供的详细信息,我认为您的所有页面都在一个stack
。我建议您分开身份验证和应用程序堆栈。为此我强烈推荐这个:https://reactnavigation.org/docs/en/auth-flow.html
但重置堆栈:
重启
重置操作会擦除整个导航状态,并将其替换为多个操作的结果。
- index - number - required - 导航状态中路由数组上活动路由的索引。
- actions - array - required - 将替换导航状态的导航操作数组。
- key - string或null - 可选 - 如果设置,具有给定键的导航器将重置。如果为null,则根导航器将重置。
import { StackActions, NavigationActions } from 'react-navigation';
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'Profile' })],
});
this.props.navigation.dispatch(resetAction);
您需要在注销时重置导航堆栈
首先定义注销操作
const logoutAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'Login' })],
});
然后退出做
this.props.navigation.dispatch(logoutAction);