import React from 'react';
import { Text, TouchableOpacity, View } from 'react-native';
import {
BottomTabNavigationProp,
createBottomTabNavigator,
} from '@react-navigation/bottom-tabs';
import { TabNavigationState } from '@react-navigation/native';
export type RootParamList = {
Feed: undefined;
Search: undefined;
};
export enum Screens {
FEED = 'Feed',
SEARCH = 'Search',
}
const Tabs = createBottomTabNavigator<RootParamList>();
export interface TabbarProps {
navigation: BottomTabNavigationProp<RootParamList, Screens>;
state: TabNavigationState<RootParamList>;
}
const TabBar = (props: TabbarProps) => {
const handleTabPress = ({
name,
isCurrentTab,
}: {
name: keyof RootParamList;
isCurrentTab: boolean;
}) => {
if (!isCurrentTab) {
props.navigation.navigate(name);
}
};
return (
<View>
{props.state.routes.map((route, index) => {
const buttonText = route.name;
const isCurrentTab = props.state.index === index;
return (
<TouchableOpacity
key={index}
onPress={() => handleTabPress({ name: route.name, isCurrentTab })}>
<Text>{buttonText}</Text>
</TouchableOpacity>
);
})}
</View>
);
};
const Nav = () => (
<Tabs.Navigator
tabBar={({ navigation, state }) => (
<TabBar navigation={navigation} state={state} />
)}>
<Tabs.Screen name={Screens.FEED} component={View} />
<Tabs.Screen name={Screens.SEARCH} component={View} />
</Tabs.Navigator>
);
export default Nav;
There is an issue with <Tab.Navigator /> and the tabbar prop. I can't seem to type it correctly for my specific navigation and state props.
