在反应导航中从嵌套导航器重置堆栈

时间:2019-02-22 07:26:34

标签: javascript reactjs react-native react-redux react-navigation

我的导航器中嵌套了一个屏幕。

const AppNavigator = createSwitchNavigator({
AuthLoading,
MainNavigator,
AuthNavigator
},
{
initialRouteName: 'AuthLoading'
});

const AuthNavigator = createStackNavigator({
VerificationNavigator,
OtpVerificationStack
},
{
initialRouteName: 'VerificationNavigator',
header: null,
headerMode: 'none'
});

AppNavigator首先加载AuthNavigator,然后从VerificationNavigator(第二个屏幕)加载,我使用导航道具导航到OtpVerificationStack。

const OtpVerificationStack = createSwitchNavigator({
OTPLoading,
SignupNavigator,
MainNavigator
},
{ 
initialRouteName: 'OTPLoading',
});

首先在OtpVerificationStack中加载SignupNavigator流。

const SignupNavigator = createStackNavigator({
FirstName,
LastName,
Email
},
{
header: null,
headerMode: 'none'
});

屏幕名由一个Google登录名组成,成功登录后,我要转到MainNavigator或屏幕“主页”。 我尝试过

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

但这似乎不起作用。什么也没做!

编辑:我尝试在异步存储中设置令牌,并在OTPLoading屏幕中检查了令牌。因此,从本质上讲,我必须将其重置为OTPVerificationStack,可以通过保持键为null来完成此操作,但是我不知道这是否是一个很好的方法。

1 个答案:

答案 0 :(得分:0)

我也面对这种问题,并通过这种流程解决了。

在流程中,您可以重置stacknavigator。

Stack1:

screen1

screen2

screen3 ...

流屏幕1->屏幕2->屏幕3(现在,如果要重置它,它将起作用)。

要重置stack1并导航到stack2初始屏幕时,请尝试以下操作:

navigateToStack(stackName,routeName,params){
        const navigateAction = NavigationActions.navigate({
            routeName: stackName,
            action: NavigationActions.navigate({
                routeName: routeName,
                params: params,
            })
        });
        this.props.navigation.dispatch(navigateAction);
    }

您只需要正确提供堆栈名称和屏幕路由名称即可。它将自动返回首页。

this.navigateToStack(MainTab,home,{item:item}):