React native 如何跳转到不同的堆栈导航器并使用react导航关闭上一个堆栈导航器?

React native 如何跳转到不同的堆栈导航器并使用react导航关闭上一个堆栈导航器?,react-native,react-navigation,React Native,React Navigation,我使用的是react导航,在不同的文件中有两个不同的堆栈路由器AuthedRouter和NoAuthedRouter。它们都有不相关的屏幕,没有重叠 AuthedRouter看起来像: const AuthedRouter = StackNavigator({ Home : { screen: Home } }) const NonAuthedRouter = StackNavigator({ Signup: { screen : Signup } SignupTwo : { sc

我使用的是react导航,在不同的文件中有两个不同的堆栈路由器AuthedRouterNoAuthedRouter。它们都有不相关的屏幕,没有重叠

AuthedRouter看起来像:

const AuthedRouter = StackNavigator({
  Home : { screen: Home }
})
const NonAuthedRouter = StackNavigator({
  Signup: { screen : Signup }
  SignupTwo : { screen : SignupTwo }
})
NoAuthedRouter.js看起来像:

const AuthedRouter = StackNavigator({
  Home : { screen: Home }
})
const NonAuthedRouter = StackNavigator({
  Signup: { screen : Signup }
  SignupTwo : { screen : SignupTwo }
})
在我的App.js中,我检查用户的App状态,如果用户需要注册,则在我的呈现方法中返回未授权外部。我的问题是,注册完成后,如何导航到AuthedRouter中的主屏幕?此外,我还想确保它不能正常运行,并且未授权外部屏幕已从内存中100%删除/etc


谢谢。

不用两个StackNavigator,你可以用一个来执行相同的操作

const MainRouter = StackNavigator({
  Signup: { screen : Signup },
  SignupTwo : { screen : SignupTwo },
  Home : { screen: Home }
})
如果用户已经注册,只需导航到主屏幕,用户无法从主屏幕返回,因为堆栈中没有屏幕

如果是新用户,则导航到注册屏幕,然后导航到注册两个屏幕和一个屏幕,注册完成,只需重置堆栈并导航到主屏幕。重置将清除堆栈屏幕。阅读react导航文档了解更多信息

重置StackNavigator的方法

this.props.navigation.dispatch(NavigationActions.reset({
  index: 0,
  actions: [
    NavigationActions.navigate({ routeName: 'Home'})
  ]
}));

这是我在重置前一个“登录堆栈后导航到“抽屉堆栈”的方式:

            export const Drawer = createDrawerNavigator(
                {
                    MyAccount: {screen: TabsStack},
                },


        export const LoginStack = createStackNavigator(
                {
                    Login: {screen: LoginPage},
                }
            );


        export const RootStack = createStackNavigator({
                Login: {screen: LoginStack},
                Drawer: {screen: Drawer},
            },
            {
                initialRouteName: 'Login',
                headerMode: 'none'
            },
然后在“登录屏幕”上执行:
在按钮上按下/单击:

     <TouchableOpacity style={styles.signuptext} onPress={this.onLoginSuccess.bind(this)}>
                            <Text style={styles.signuptext}> Sign Up Now </Text>
                        </TouchableOpacity>
注意:这基本上会在导航到“抽屉”堆栈时重置“登录”堆栈。因此,现在当您按下后退按钮时,您无法返回“登录堆栈”的登录屏幕