Search code examples
react-nativereact-navigationreact-navigation-bottom-tab

Where is the `tabBarComponent` option in React-Navigation version 5?


I'm migrating a RN project version 4 to 5.

I was using the tabBarComponent option to replace tab bar component with a custom one. Old docs.

How to achieve the same in version 5, I can't find this option in the new docs.


Solution

  • Here is the new API way to achieve a custom tab component:

    import { View, Text, TouchableOpacity } from 'react-native';
    
    function MyTabBar({ state, descriptors, navigation }) {
      return (
        <View style={{ flexDirection: 'row' }}>
          {state.routes.map((route, index) => {
            const { options } = descriptors[route.key];
            const label =
              options.tabBarLabel !== undefined
                ? options.tabBarLabel
                : options.title !== undefined
                ? options.title
                : route.name;
    
            const isFocused = state.index === index;
    
            const onPress = () => {
              const event = navigation.emit({
                type: 'tabPress',
                target: route.key,
              });
    
              if (!isFocused && !event.defaultPrevented) {
                navigation.navigate(route.name);
              }
            };
    
            const onLongPress = () => {
              navigation.emit({
                type: 'tabLongPress',
                target: route.key,
              });
            };
    
            return (
              <TouchableOpacity
                accessibilityRole="button"
                accessibilityStates={isFocused ? ['selected'] : []}
                accessibilityLabel={options.tabBarAccessibilityLabel}
                testID={options.tabBarTestID}
                onPress={onPress}
                onLongPress={onLongPress}
                style={{ flex: 1 }}
              >
                <Text style={{ color: isFocused ? '#673ab7' : '#222' }}>
                  {label}
                </Text>
              </TouchableOpacity>
            );
          })}
        </View>
      );
    }
    
    // ...
    
    <Tab.Navigator tabBar={props => <MyTabBar {...props} />}>
      {...}
    </Tab.Navigator>
    

    This link will surely help. https://reactnavigation.org/docs/en/next/bottom-tab-navigator.html#tabbar

    Hope this helps. Cheers!