import React, { useCallback, useEffect, useState } from 'react'; import { DeviceEventEmitter, ImageSourcePropType } from 'react-native'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { DEVICE_ENENT_UPDATE_HOME_FEATURE_LIST_KEY, HEADER_TINT_COLOR, HEADER_TITLE_FONT_SIZE, HEADER_TITLE_FONT_WEIGHT, TAB_BAR_ACTIVE_TINT_COLOR, TAB_BAR_INACTIVE_TINT_COLOR, } from '@common//constants'; import { useAuth } from '@common/contexts/useAuth'; import { MainTabParamList } from './MainParamList'; import HomeScreen from '@app/screens/home/home/HomeScreen'; import MineScreen from '@app/screens/mine/mine/MineScreen'; import { Feature } from '@app/screens/home/home/api'; import { useHandleClickFeatureListItem } from '@app/screens/home/home/hooks/useHandleClickFeatureListItem'; import TabBarIcon from '@common/components/TabBarIcon.tsx'; const Tab = createBottomTabNavigator(); export default function MainTab() { const { state: { userInfo }, } = useAuth(); // 【状态】 const [recommendFeature, setRecommendFeature] = useState( undefined, ); // 当前推荐的服务 // 【通知监听】 useEffect(() => { // 监听用户信息的更新 const listener = DeviceEventEmitter.addListener( DEVICE_ENENT_UPDATE_HOME_FEATURE_LIST_KEY, (feature?: Feature) => { setRecommendFeature(feature); }, ); return () => { listener.remove(); }; }, []); // 【点击事件】 const { handleClickFeatureListItem } = useHandleClickFeatureListItem(); // 【子组件】 const handleTabBarIcon = useCallback( (props: { focused: boolean; size: number; activeImage: ImageSourcePropType; inactiveImage: ImageSourcePropType; badge?: boolean; }) => { return ( ); }, [], ); if (userInfo === undefined) { return null; } return ( { return handleTabBarIcon({ focused: focused, size: size, activeImage: require('@app/assets/images/common/tab_home_s.png'), inactiveImage: require('@app/assets/images/common/tab_home.png'), }); }, }} /> {recommendFeature && ( { return handleTabBarIcon({ focused: focused, size: size, activeImage: require('@app/assets/images/common/tab_recommend.png'), inactiveImage: require('@app/assets/images/common/tab_recommend.png'), badge: recommendFeature.badge, }); }, }} listeners={{ tabPress: e => { e.preventDefault(); // 阻止默认行为 handleClickFeatureListItem(recommendFeature); }, }} /> )} { return handleTabBarIcon({ focused: focused, size: size, activeImage: require('@app/assets/images/common/tab_mine_s.png'), inactiveImage: require('@app/assets/images/common/tab_mine.png'), }); }, }} /> ); } function RecommendScreen() { return null; } // 图标 function MainTabBarIcon(props: { focused: boolean; size: number; inactiveImage: ImageSourcePropType; activeImage: ImageSourcePropType; badge?: boolean; }) { return ( ); }