#reactjs #react-native #react-navigation
#reactjs #реагировать-родной #реакция-навигация
Вопрос:
Предыстория
На самом деле, я разработал навигатор нижних вкладок для своего приложения, который показывает только 5 значков / кнопок. Мне нужно, чтобы эта навигация отображалась почти на каждом экране.
Проблема
Это моя структура приложения:
<NavigationContainer>
<Stack.Navigator initialRouteName={user ? 'Home' : 'Login'}
screenOptions={{cardStyle: { backgroundColor: '#FFFFFF' }}}>
<Stack.Screen name="Home"options={{headerShown: false}}>
{props => <TabNav {...props} extraData={user} />}
</Stack.Screen>
<Stack.Screen name="Login" component={LoginScreen} options={{headerShown: false}}/>
<Stack.Screen name="RegistrationMethod" component={RegistrationMethod} options={{headerShown: false}}/>
<Stack.Screen name="TermsScreen" component={TermsScreen} options={{headerShown: false}}/>
<Stack.Screen name="Registration" component={RegistrationScreen} options={{headerShown: false}}/>
<Stack.Screen name="Detail" options={{title: ''}} component={BarDetail}/>
<Stack.Screen name="Profile" options={{headerShown: false}}>
{props => <ProfileScreen {...props} extraData={user} />}
</Stack.Screen>
<Stack.Screen name="personalDetails" options={{title: 'Perfil'}}>
{props => <PersonalDetails {...props} extraData={user} />}
</Stack.Screen>
<Stack.Screen name="config" component={ConfigScreen} options={{title:'Configuración'}}/>
<Stack.Screen name="menu" component={MenuScreen} options={{headerShown: false}}/>
<Stack.Screen name="checkoutStart" component={checkoutStart} options={{title: 'Tu compra'}}/>
<Stack.Screen name="checkoutII" component={checkoutII} options={{title: 'Tu compra'}}/>
<Stack.Screen name="reviewScreen" component={ReviewScreen} options={{title: 'Tu opinión'}}/>
<Stack.Screen name="searchScreen" component={TabNav} options={{headerShown: false}}/>
</Stack.Navigator>
</NavigationContainer>
<Tab.Navigator initialRouteName={user ? 'Home' : 'Login'} tabBarOptions={{showLabel: false}}
screenOptions={{showLabel: false, cardStyle: { backgroundColor: '#FFFFFF' }}} sceneContainerStyle={{backgroundColor: 'white'}}>
<Tab.Screen name="Home" options={{
tabBarIcon: ({size,focused,color}) => {
if (focused) {
return (
<SelectedHome/>)
} else {
return (
<LinearHome/>)
}
;},}}
>
{props => <HomeScreen {...props} extraData={user} />}
</Tab.Screen>
<Tab.Screen name="Fav" component={FavScreen} options={{
tabBarIcon: ({size,focused,color}) => {
return (
<LinearFav/>)
;},}}
/>
<Tab.Screen name="Search" component={SearchScreen} options={{
tabBarIcon: ({size,focused,color}) => {
if (focused) {
return (
<SelectedSearch/>)
} else {
return (
<LinearSearch/>)
}
;},}}/>
<Tab.Screen name="Notifications" component={NotificationsScreen} options={{
tabBarIcon: ({size,focused,color}) => {
if (focused) {
return (
<SelectedNotifications/>)
} else {
return (
<LinearNotifications/>)
}
;},}}/>
<Tab.Screen name="HelpScreen" component={HelpScreen} options={{
tabBarIcon: ({size,focused,color}) => {
if (focused) {
return (
<SelectedHelp/>)
} else {
return (
<LinearHelp/>)
}
;},}}/>
</Tab.Navigator>
Поэтому мне нужен навигатор вкладок таким, каким он должен отображаться на большинстве экранов из навигатора стека. Я думал изменить его, сделав все вкладки и стеки, но разве это не приведет к беспорядку, а также покажет каждый экран в нижнем колонтитуле как осязаемый?
Вопрос
Как я могу сохранить навигатор вкладок только с этими значками на каждом другом экране? (Обратите внимание, что решение должно учитывать, что оно должно быть скрыто на некоторых конкретных экранах.)
Ответ №1:
Если вы хотите показать нижний навигатор вкладок на определенных экранах, вам следует поместить эти экраны внутрь a <Stack.Navigator />
и поместить <Stack.Navigator />
внутрь <Tab.Navigator />
.
Более подробная информация здесь: https://reactnavigation.org/docs/tab-based-navigation#a-stack-navigator-for-each-tab
Комментарии:
1. Круто, я это проверю. Если я решу свою проблему с этим документом, я приму ваш ответ.