Search code examples
reactjsreact-nativereact-navigationstack-navigatortabnavigator

React-native TabNavigator inside StackNavigator, cannot move between screens


I am using react-navigation with my react-native app. I have to put TabNavigators inside StackNavigator to use the built in header feature. See below.

app.js

const FeedScreenStack = createStackNavigator({
  Feed: {
    screen: feed,
    navigationOptions: {
      headerTitle: "Feed"
    }
  }
});

const ProfileScreenStack = createStackNavigator({
  Feed: {
    screen: profile,
    navigationOptions: {
      headerTitle: "My Profile"
    }
  }
})

const TabStack = createBottomTabNavigator({
  Feed: { screen: FeedScreenStack },
  Profile: { screen: ProfileScreenStack }
});

const MainStack = createSwitchNavigator(
  {
    Home: TabStack,
    Auth: AuthStack
  },
  {
    initialRouteName: 'Home'
  }
);

feed.js:

import React from 'react';
import { View } from 'react-native';

class feed extends React.Component {
    constructor(props) {
        super(props);
    }

    render(){
        return (
            <View style={{flex:1}}>
               ...
            </View>
        )
    }
}

export default feed;

When clicking on profile, the app can move to profile screen. But it will not move to feed screen when clicking on feed. There are no warnings or errors, the app simply does not respond to when I click on feed. What am I doing wrong?


Solution

  • The problem is that you have defined repeted route names at many places, try giving different names

    Do it like this

    const FeedScreenStack = createStackNavigator({
      FeedStack: {
        screen: feed,
        navigationOptions: {
          headerTitle: "Feed"
        }
      }
    });
    
    const ProfileScreenStack = createStackNavigator({
      ProfileStack: {
        screen: profile,
        navigationOptions: {
          headerTitle: "My Profile"
        }
      }
    })
    
    const TabStack = createBottomTabNavigator({
      Feed: { screen: FeedScreenStack },
      Profile: { screen: ProfileScreenStack }
    });
    
    const MainStack = createSwitchNavigator(
      {
        Home: TabStack,
        Auth: AuthStack
      },
      {
        initialRouteName: 'Home'
      }
    );