导航到登录屏幕后重置堆栈

时间:2019-03-11 09:26:25

标签: react-native react-native-android react-navigation

我正在制作一个本机移动应用程序,并且我有一个带有退出按钮的导航抽屉。我知道如何使用props.navigation.navigate('Login')从那里导航到登录屏幕,但是问题是,如果用户这样做,他们仍然可以从登录屏幕打开抽屉,然后导航回到其他屏幕之一,或按Android上的后退按钮。

如果用户来自另一个页面,然后禁用打开抽屉按钮,我想我可以在登录屏幕上进行检查,但这似乎有点黑。我想知道是否有正确的方法,也许不知道在登录时重置堆栈。

2 个答案:

答案 0 :(得分:1)

您的实施效果不好。从您提供的详细信息来看,我认为您的所有页面都在一个stack中。我建议您将身份验证和应用程序堆栈分开。为此,我强烈建议您这样做:https://reactnavigation.org/docs/en/auth-flow.html

但重置堆栈:

  

重置

     

重设操作将擦除整个导航状态并将其替换为   几个动作的结果。

     
      
  • 索引-编号-必需-处于导航状态的路径数组上活动路径的索引。
  •   
  • 操作-数组-必需-导航操作数组,它将替换导航状态。
  •   
  • 键-字符串或null-可选-如果设置,则具有给定键的导航器将重置。如果为null,则根导航器将重置。
  •   
import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'Profile' })],
});
this.props.navigation.dispatch(resetAction);

源:https://reactnavigation.org/docs/en/stack-actions.html

答案 1 :(得分:0)

您需要在退出时重置导航堆栈

首先定义注销操作

const logoutAction = StackActions.reset({
    index: 0,
    actions: [NavigationActions.navigate({ routeName: 'Login' })],
});

然后注销

this.props.navigation.dispatch(logoutAction);
相关问题