使用反应导航将导航历史记录重置为登录屏幕

问题描述:

登录后(欢迎使用)用户导航到首页后,我重置历史记录,以便用户不能像这样回去:使用反应导航将导航历史记录重置为登录屏幕

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

     this.props.navigation.dispatch(actionToDispatch); 

此功能正常。按下注销后,用户应该返回欢迎页面,但它不起作用。以下是我在做什么:

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

     this.props.navigation.dispatch(resetAction); 

该错误说明没有“欢迎”路线。必须是“主”,“隐私”,“条款”之一,这是主页中某个选项卡的路线。看到他们在下面:

const AppStack = StackNavigator({ 
        Welcome: { 
         screen: Welcome 
        }, 
        Home: { 
         screen: Tabs 
        } 
       }, { 
         initialRouteName: this.state.isLoggedIn ? 'Home' : 'Welcome', 
         headerMode: 'none' 
        } 
       ); 

export const ProfileStack = StackNavigator({ 
    Profile: { 
     screen: Profile, 
    }, 
}); 

export const SettingsStack = StackNavigator({ 
    Settings: { 
     screen: Settings, 
    }, 
}, { 
    }); 

export const InfoStack = StackNavigator({ 
    Main: { 
     screen: Main, 
    }, 
    Privacy: { 
     screen: Privacy 
    }, 
    Terms: { 
     screen: Terms 
    } 
}); 

const routeConfiguration = { 

    Profile: { screen: ProfileStack }, 
    Settings: { screen: SettingsStack }, 
    Info: { screen: InfoStack } 
}; 

const tabBarConfiguration = { 
    tabBarOptions: { 
     activeTintColor: 'white', 
     inactiveTintColor: 'lightgray', 
     labelStyle: { 
      fontSize: Normalize(10), 
      fontFamily: Fonts.book 
     }, 
     style: { 
      backgroundColor: Colors.greenLightGradient, 
      borderTopWidth: 1, 
      borderTopColor: Colors.tabGreenLine 
     }, 
    } 
}; 

export const Tabs = TabNavigator(routeConfiguration, tabBarConfiguration); 

我在这里找到了解决办法:https://github.com/react-community/react-navigation/pull/789

const resetAction = NavigationActions.reset({ 
      index: 0, 
      actions: [ 
       NavigationActions.navigate({ routeName: 'Welcome' }), 
      ], 
      key: null 
     }); 

this.props.navigation.dispatch(resetAction); 

关键:空是重要的组成部分。

+0

我有相同的代码,但它不适合我。这只适用于StackNavigator吗?我正在使用TabNavigator。 –

+0

是的,我认为它不适用于TabNavigator。但是你应该再次检查,因为这是几个月前我最后检查的时候。 – jazzdle

+0

我也发现这对我不起作用,在这里创建了一个问题:https://*.com/questions/45575437/react-navigation-preventing-going-back-to-loading-screen?noredirect=1# comment78111975_45575437 –