import React, { useState, useEffect, useImperativeHandle, forwardRef, } from "react"; import cls from "classnames"; interface SaveStatusProps { className?: string; } export interface SaveStatusRef { triggerSave: () => void; reset: () => void; // 新增的重置方法 } const SaveStatus = forwardRef( ({ className }, ref) => { const [lastSaveTime, setLastSaveTime] = useState(null); const [showSaved, setShowSaved] = useState(false); const [timeSinceLastSave, setTimeSinceLastSave] = useState(0); useImperativeHandle(ref, () => ({ triggerSave: () => { setLastSaveTime(new Date()); setShowSaved(true); }, reset: () => { // 新增的重置方法 setLastSaveTime(null); setShowSaved(false); setTimeSinceLastSave(0); }, })); useEffect(() => { if (showSaved) { const timer = setTimeout(() => { setShowSaved(false); }, 10000); return () => clearTimeout(timer); } }, [showSaved]); useEffect(() => { const updateTimeSinceLastSave = () => { if (lastSaveTime) { const now = new Date(); const diffInMinutes = Math.floor( (now.getTime() - lastSaveTime.getTime()) / 60000 ); if (diffInMinutes > 0) { setTimeSinceLastSave(diffInMinutes); } } }; const timer = setInterval(updateTimeSinceLastSave, 60000); updateTimeSinceLastSave(); // 立即更新一次 return () => clearInterval(timer); }, [lastSaveTime]); return (
{showSaved && ( 已保存 )} {timeSinceLastSave > 0 && !showSaved && lastSaveTime && ( 最近修改:{timeSinceLastSave} 分钟前 )} {(showSaved || (timeSinceLastSave > 0 && !showSaved && lastSaveTime)) && ( )}
); } ); export default SaveStatus;