从代码上可以看到,没有调用tabPress,我做错了还是缺少什么,不幸的是,我没有找到任何用于React Navigation版本5的代码示例。
<Tab.Navigator labeled={false} barStyle={{backgroundColor: '#ffffff', height: 55}} options={{
tabPress: ({navigation}) => {
console.log('nav tab press triggered')
}
}}>
<Tab.Screen name={`DeviceNavigatorTab`} component={DeviceNavigator} options={{
tabBarIcon: ({tintColor}) => <Image source={require('../../images/feather_home-menu.png')}
style={{width: 26, height: 26, tintColor}}/>,
tabPress: ({navigation}) => {
console.log('tab press triggered')
}
}} tabPress={() => { console.log('prop tab pressed') }}/>
<Tab.Screen name={`AlarmNavigatorTab`} component={AlarmNavigator} options={{
tabBarIcon: ({tintColor}) => <Image source={require('../../images/feather_alert-circle.png')}
style={{width: 26, height: 26, tintColor}}/>,
}}/>
<Tab.Screen name={`ProfileNavigatorTab`} component={ProfileNavigator} options={{
tabBarIcon: ({tintColor}) => <Image source={require('../../images/feather_user.png')}
style={{width: 26, height: 26, tintColor}}/>,
}} />
</Tab.Navigator>
答案 0 :(得分:13)
我在文档中发现了一些以前从未见过的新内容,这是将侦听器添加到屏幕的方法,每次用户单击选项卡时,它将转到该选项卡内的第一个堆栈屏幕
<Tab.Screen name={`DeviceNavigatorTab`} component={DeviceNavigator} options={{
tabBarIcon: ({tintColor}) => <Image source={require('../../images/feather_home-menu.png')} style={{width: 26, height: 26, tintColor}}/>,
}} listeners={({ navigation, route }) => ({
tabPress: e => {
if (route.state && route.state.routeNames.length > 0) {
navigation.navigate('Device')
}
},
})}/>
答案 1 :(得分:0)
您需要在组件中监听/订阅“ tabPress”事件,如下所示。
React.useEffect(() => {
const unsubscribe = navigation.addListener('tabPress', e => {
// Prevent default behavior
e.preventDefault();
// Do something manually
// ...
});
return unsubscribe;
}, [navigation]);