Что вам нужно сделать, это использовать Tab Navigator. В программе response-navigation v5 есть 3 способа сделать это:
createBottomTabNavigator
createMaterialBottomTabNavigator (очень легко настроить)
createMaterialTopTabNavigator (с tabBarPosition: 'bottom')
Также вы можете настроить вкладки, прочитав документацию.
Я сделал вам базовый c пример, используя эту последнюю опцию:
import { SafeAreaView, View, Text, StyleSheet } from 'react-native'
import { NavigationContainer } from '@react-navigation/native'
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs'
import { createStackNavigator } from '@react-navigation/stack'
const Header = () => <View style={styles.header}><Text>Header title</Text></View>
const Main = () => <View style={styles.component}><Text>Main component</Text></View>
const Data = () => <View style={styles.component}><Text>Data component</Text></View>
const Grafic = () => <View style={styles.component}><Text>Grafic component</Text></View>
const footerConfig = {
tabBarPosition: 'bottom',
}
const Tabs = createMaterialTopTabNavigator()
const MyFooter = () => (
<Tabs.Navigator {...footerConfig}>
<Tabs.Screen name="Main" component={Main} />
<Tabs.Screen name="Data" component={Data} />
<Tabs.Screen name="Grafic" component={Grafic} />
</Tabs.Navigator>
)
const stackConfig = {
headerMode: 'none',
}
const Stack = createStackNavigator()
const MyStack = () => (
<Stack.Navigator {...stackConfig}>
<Stack.Screen name="Tabs" component={MyFooter} />
</Stack.Navigator>
)
export default () => (
<SafeAreaView style={styles.main}>
<Header />
<NavigationContainer>
<MyStack />
</NavigationContainer>
</SafeAreaView>
)
const styles = StyleSheet.create({
main: {
flex: 1,
},
header: {
height: 64,
width: '100%',
justifyContent: 'center',
alignItems: 'center',
},
component: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
})
РЕДАКТИРОВАТЬ :
Вы можете использовать крючок useNavigation внутри ваших компонентов. Если вы хотите использовать вашу текущую конфигурацию. https://reactnavigation.org/docs/use-navigation/ useNavigation
Кроме того, для отправки реквизитов навигации компонентам это:
<Stack.Screen name="Main" component={() => <Main />} />
должно стать:
<Stack.Screen name="Main" component={Main} />
// or
<Stack.Screen name="Main" component={props => <Main {...props} />} />