2017-10-09 62 views
0

我想要一个从抽屉项目按下注销的简单功能。对于我这样做: -DrawerNavigator:DrawerItem不是屏幕

const HomeNavigator = DrawerNavigator(
    { 
     Splash: { screen: SplashScreen } 
    } 
) 

这抽屉里增加了一个项目上,单击它的应用程序导航到闪屏。但用这种方法,我无法实现注销的全部功能。即: -

  1. 清除屏幕堆栈,以便后面的按下应用程序不应该回到屏幕与抽屉。
  2. 注销后,应用程序应该从飞溅导航到登录屏幕。

我上面的解决方案不让我做这两件事。有更好的方法来达到我的要求吗?

更新

我的导航结构至今是有点像这样: -

StackNavigator(
    Splash: {screen: SplashScreen}, 
    Login: {screen: LoginScreen}, 
    Home: {screen: HomeScreen}, 
) 

HomeNavigator = DrawerNavigator(
    Logout: {screen: SplashScreen} 
) 

HomeScreen{ 
    render(){ 
     return <HomeNavigator navigation={this.props.navigation} />; 
    } 
} 

你可以看到我使用SplashScreen在这两个导航仪。在堆叠中,它是抽屉中的第一个屏幕,用于注销。但是当我从抽屉屏幕导航飞溅时,我失去了我之前创建的StackNavigator,因此无法登录导航。你能建议我有更好的办法吗?

回答

1

您可以在开机画面的componentWillMount(){}调用这个函数:

clearStack = (routeToGo) => { 
    const resetAction = NavigationActions.reset({ 
     index: 0, 
     actions: [ 
      NavigationActions.navigate({ routeName: routeToGo }) 
     ] 
    }) 
    this.props.navigation.dispatch(resetAction) 
} 

从反应导航导入{} NavigationActions。 您还可以使用DrawerNavigatorConfig中的contentComponent prop创建自定义抽屉导航器,您可以在其中更改导航项的onPress以执行任何您想要的操作,例如调用该函数以清除堆栈。

UPDATE:在闪屏

componentWillMount(){ 
    this.clearStack('Login') 
} 
+0

哦,我的坏。通过看到你的回答,我才意识到这已经被处理了。你回答了我的一半问题。我将如何从飞溅导航到登录?我会更新我的问题,以更多的信息为我的下半场。 –

+0

查看我的编辑更新 –

+0

请参阅我的更新问题。 –