2017-09-18 2 views
2
fermeture de session

j'ai un TabNavigator dans un StackNavigator (dans le StackNavigator je la vue login et le TabNavigator, Wich contient les autres écrans). Le problème est que je dois faire quelque chose comme un bouton 'Logout' sur un onglet qui redirige juste vers la vue Login. Si j'essaie simplement de rediriger vers le LoginView, le TabBar apparaît toujours en bas de l'écran et ce n'est pas ce que je veux. Est-il possible de cliquer sur le bouton TabBar et de revenir au StackNavigator initial? (Comme une propriété OnPress ou quelque chose comme ça).React Navigation bouton sur TabNavigator

Voici mon routeur

const tab_bar = TabNavigator({ 
     Home: { 
     screen: HomeScreen 
     }, 
     Logout: { 
     screen: LoginView // this just show the view but the tabBar still appearing 
     }, 
    }); 

const Login = StackNavigator({ 
    login: { 
    screen: LoginView, 
    }, 
    List: { 
    screen: tab_bar 
    ,navigationOptions: {header:null} 
    } 
}, 
{ 
    initialRouteName: 'login' 
}); 
+0

Vous pouvez utiliser [tabBarVisible] (https://reactnavigation.org/docs/navigators/tab#tabBarVisible) prop pour l'écran que vous ne souhaitez pas afficher. – bennygenel

+0

Une meilleure façon de le faire est d'avoir une pile de route déconnectée, et connecté dans un. Dans votre application de niveau supérieur, si loggedIn = true, affichez les itinéraires pour cela. Passez un screenprop qui va définir loggedIn: false si vous voulez vous déconnecter et qu'il affichera l'autre pile – zackify

+0

Si j'utilise tabBarVisible, je peux glisser sur d'autres écrans, ce dont j'ai besoin est comme 'goBack' dans le premier' StackNavigator' (du 'TabNavigator' au' loginView') –

Répondre

1

Fait! En utilisant la propriété tabBarOnPress et le Navigation Actions.

const tab_bar = TabNavigator({ // This tabNavigator is inside a stackNavigator, wich contains the 'login' view 
    Home: { 
    screen: Home 
    }, 
    Logout: { 
    screen: Logout  // Empty screen, useless in this specific case 
     ,navigationOptions: ({navigation}) => ({ 
      tabBarOnPress: (scene, jumpToIndex) => { 
       return Alert.alert( // Shows up the alert without redirecting anywhere 
        'Confirmation required' 
        ,'Do you really want to logout?' 
        ,[ 
        {text: 'Accept', onPress:() => { navigation.dispatch(NavigationActions.navigate({ routeName: 'login' }))}}, 
        {text: 'Cancel'} 
        ] 
       ); 
      }, 
     }) 
    }, 
}); 

Lorsque l'utilisateur clique sur le bouton logout sur le tabBar affiche une alerte pour confirmer l'action, alors si l'utilisateur accepte redirect à la vue de connexion.

NOTE (22/09/2017): Pour utiliser la propriété tabBarOnPress, téléchargez le master branch version (pas encore la version de NPM).