diff --git a/components/ImageUploader.tsx b/components/ImageUploader.tsx index fbecd52..a760f29 100644 --- a/components/ImageUploader.tsx +++ b/components/ImageUploader.tsx @@ -36,15 +36,6 @@ const ImageUploader = ({ const { showMessage } = useSnackbar(); const fileInputRef = useRef(null); - // 清理预览 URL,防止内存泄漏 - useEffect(() => { - return () => { - if (previewUrl) { - URL.revokeObjectURL(previewUrl); - } - }; - }, [previewUrl]); - const handleFileChange = useCallback( (file: File) => { onFileChange(file); diff --git a/pages/QrCode/hooks/useQrCode.ts b/pages/QrCode/hooks/useQrCode.ts index a18f146..cf1769d 100644 --- a/pages/QrCode/hooks/useQrCode.ts +++ b/pages/QrCode/hooks/useQrCode.ts @@ -162,13 +162,19 @@ export function useQrCode(): QrCodeContextValue { // 处理文件选择 const handleFileChange = useCallback( (file: File) => { - setParserState((prev) => ({ - ...prev, - selectedFile: file, - previewUrl: URL.createObjectURL(file), - decodedResult: '', - parseError: '', - })); + setParserState((prev) => { + // 释放旧的预览 URL + if (prev.previewUrl) { + URL.revokeObjectURL(prev.previewUrl); + } + return { + ...prev, + selectedFile: file, + previewUrl: URL.createObjectURL(file), + decodedResult: '', + parseError: '', + }; + }); // 自动解析 parseQrCode(file); },