import { useEffect, useState } from 'react'; import { appTabs, type AppTabConfig } from '../../router/tabs'; interface KeepAliveViewportProps { activeTab: AppTabConfig; } export function KeepAliveViewport({ activeTab }: KeepAliveViewportProps) { const [mountedTabIds, setMountedTabIds] = useState([activeTab.id]); useEffect(() => { const timerId = window.setTimeout(() => { setMountedTabIds((prev) => (prev.includes(activeTab.id) ? prev : [...prev, activeTab.id])); }, 0); return () => window.clearTimeout(timerId); }, [activeTab.id]); return (
{appTabs.map((tab) => { const shouldRender = tab.keepAlive ? mountedTabIds.includes(tab.id) : tab.id === activeTab.id; if (!shouldRender) { return null; } const TabComponent = tab.component; const isActive = tab.id === activeTab.id; return (
); })}
); }