import React, { useEffect, useState } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; import { useLocation } from 'umi'; import './index.less'; export interface PageTransitionProps { children: React.ReactNode; type?: 'fade' | 'slide' | 'scale'; duration?: number; className?: string; } const PageTransition: React.FC = ({ children, type = 'fade', duration = 300, className = '', }) => { const location = useLocation(); const [displayLocation, setDisplayLocation] = useState(location); const [transitionStage, setTransitionStage] = useState('fadeIn'); useEffect(() => { if (location !== displayLocation) setTransitionStage('fadeOut'); }, [location, displayLocation]); return (
{ if (transitionStage === 'fadeOut') { setDisplayLocation(location); setTransitionStage('fadeIn'); } }} > {children}
); }; // 简化版本 - 仅使用CSS动画 export const SimplePageTransition: React.FC<{ children: React.ReactNode; className?: string; enableAnimation?: boolean; onAnimationEnd?: () => void; }> = ({ children, className = '', enableAnimation = true, onAnimationEnd, }) => { const handleAnimationEnd = () => { if (enableAnimation && onAnimationEnd) { onAnimationEnd(); } }; return (
{children}
); }; export default PageTransition;