2017-10-09 51 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

請參閱我的更新問題。 –