按下 BottomTabNavigator 上的 Tab 时导航到屏幕
Navigate to the screen when Tab on BottomTabNavigator is pressed
我想在按下 BottomTabNavigator 上的特定选项卡时导航到屏幕。
通常情况下,当按下选项卡时,它会自动导航到配置的屏幕。但我不想有这种行为。我想隐藏该屏幕上的底部选项卡,并在顶部栏中也提供 back 功能。我通常在 ReactNavigationStack 屏幕中使用 navigation.navigate('routeName')
。但是我不知道how/where在BottomTabNavigator配置中写这段代码
例如,我在底栏中有以下 5 个选项卡。当按下 Add 按钮时,我想导航到 AddNewScreen。我不知道将那个 onPress 事件放在哪里。我试着把它放在 options
和 BottomTab.Screen
下。但是还是不行。
我试图拦截 onPress 事件以使用 navigation.navigate
。但它甚至没有被击中,它总是打开带有标签栏的 AddNewScreen。
<BottomTab.Navigator initialRouteName={INITIAL_ROUTE_NAME}>
<BottomTab.Screen
name="Home"
component={HomeScreen}
initialParams="Home Params"
options={{
title: 'Home',
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-home" iconType="ion" />,
}}
/>
<BottomTab.Screen
name="AddNew"
component={AddNewScreen}
options={{
title: 'Add',
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-add-circle" iconType="ion"
onPress={(e) => {
e.preventDefault();
console.log(e)
}} />,
}}
/>
</BottomTab.Navigator>
“添加新”屏幕始终使用底部标签栏打开。
问题:
- 无论如何在标签为时都可以导航到特定屏幕
压?
- 有没有隐藏底部标签栏的添加新
屏幕?
更新:
导航库 v6 支持 Listener 可以使用的功能
<Tab.Screen
name="Chat"
component={Chat}
listeners={{
tabPress: e => {
// Prevent default action
e.preventDefault();
//Any custom code here
alert(123);
},
}}
/>;
您可以使用标签栏按钮在底部工具栏中拥有自定义功能。代码如下
<Tab.Screen
name="Settings2"
component={SettingsScreen}
options={{
tabBarButton: props => (
<TouchableOpacity {...props} onPress={() => alert(123)} />
),
}}
/>
这会呈现一个正常的底部标签栏按钮,但 onclick 会显示警报,您可以将代码替换为您的导航或您需要的任何其他代码。
'SettingsScreen' 组件也可以是返回 null 的虚拟组件。
希望对您有所帮助。
您可以拥有自定义功能
<Tab.Screen
name="Add"
component={View}
listeners={({ navigation }) => ({
tabPress: (e) => {
// Prevent default action
e.preventDefault();
// Do something with the `navigation` object
navigation.navigate("PhotoNavigation"); // Here!!!!!!!!!!!!!!!!!!!!!!!!!!!!
},
})}
/>
<Tab.Screen name="Notifications" component={Notifications} />
我想在按下 BottomTabNavigator 上的特定选项卡时导航到屏幕。
通常情况下,当按下选项卡时,它会自动导航到配置的屏幕。但我不想有这种行为。我想隐藏该屏幕上的底部选项卡,并在顶部栏中也提供 back 功能。我通常在 ReactNavigationStack 屏幕中使用 navigation.navigate('routeName')
。但是我不知道how/where在BottomTabNavigator配置中写这段代码
例如,我在底栏中有以下 5 个选项卡。当按下 Add 按钮时,我想导航到 AddNewScreen。我不知道将那个 onPress 事件放在哪里。我试着把它放在 options
和 BottomTab.Screen
下。但是还是不行。
我试图拦截 onPress 事件以使用 navigation.navigate
。但它甚至没有被击中,它总是打开带有标签栏的 AddNewScreen。
<BottomTab.Navigator initialRouteName={INITIAL_ROUTE_NAME}>
<BottomTab.Screen
name="Home"
component={HomeScreen}
initialParams="Home Params"
options={{
title: 'Home',
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-home" iconType="ion" />,
}}
/>
<BottomTab.Screen
name="AddNew"
component={AddNewScreen}
options={{
title: 'Add',
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-add-circle" iconType="ion"
onPress={(e) => {
e.preventDefault();
console.log(e)
}} />,
}}
/>
</BottomTab.Navigator>
“添加新”屏幕始终使用底部标签栏打开。
问题:
- 无论如何在标签为时都可以导航到特定屏幕 压?
- 有没有隐藏底部标签栏的添加新 屏幕?
更新:
导航库 v6 支持 Listener 可以使用的功能
<Tab.Screen
name="Chat"
component={Chat}
listeners={{
tabPress: e => {
// Prevent default action
e.preventDefault();
//Any custom code here
alert(123);
},
}}
/>;
您可以使用标签栏按钮在底部工具栏中拥有自定义功能。代码如下
<Tab.Screen
name="Settings2"
component={SettingsScreen}
options={{
tabBarButton: props => (
<TouchableOpacity {...props} onPress={() => alert(123)} />
),
}}
/>
这会呈现一个正常的底部标签栏按钮,但 onclick 会显示警报,您可以将代码替换为您的导航或您需要的任何其他代码。 'SettingsScreen' 组件也可以是返回 null 的虚拟组件。
希望对您有所帮助。
您可以拥有自定义功能
<Tab.Screen
name="Add"
component={View}
listeners={({ navigation }) => ({
tabPress: (e) => {
// Prevent default action
e.preventDefault();
// Do something with the `navigation` object
navigation.navigate("PhotoNavigation"); // Here!!!!!!!!!!!!!!!!!!!!!!!!!!!!
},
})}
/>
<Tab.Screen name="Notifications" component={Notifications} />