import React, {memo, useCallback, useEffect, useState} from 'react'; import {StyleSheet, Text, View} from 'react-native'; import rpx from '@/utils/rpx'; import {SceneMap, TabBar, TabView} from 'react-native-tab-view'; import {pluginManager, usePlugins} from '@/common/pluginManager'; import MusicResults from './results/musicResults'; import AlbumResults from './results/albumResults'; import DefaultResults from './results/defaultResults'; import {renderMap} from './results'; import ResultWrapper from './resultWrapper'; import {fontWeightConst} from '@/constants/uiConst'; interface IResultSubPanelProps { tab: ICommon.SupportMediaType; } // 展示结果的视图 function getResultComponent(tab: ICommon.SupportMediaType, pluginHash: string, pluginName: string) { return tab in renderMap ? memo( () => , () => true, ) : () => ; } /** 结果scene */ function getSubRouterScene( tab: ICommon.SupportMediaType, routes: Array<{key: string; title: string}>, ) { const scene: Record = {}; routes.forEach(r => { scene[r.key] = getResultComponent(tab, r.key, r.title); }); return SceneMap(scene); } function ResultSubPanel(props: IResultSubPanelProps) { const [index, setIndex] = useState(0); // todo 是否聚合结果,如果是的话 const routes = [ { key: 'all', title: '全部', }, ].concat( pluginManager.getPlugins().map(_ => ({ key: _.hash, title: _.name, })), ); return ( ( null} pressColor="transparent" renderLabel={({route, focused, color}) => ( {route.title ?? '(未命名)'} )}> )} renderScene={useCallback(getSubRouterScene(props.tab, routes), [ props.tab, ])} onIndexChange={setIndex} initialLayout={{width: rpx(750)}}> ); } // 不然会一直重新渲染 export default memo(ResultSubPanel);