From bd236e9561cc362f8b203183f496d5ae6e92bbd3 Mon Sep 17 00:00:00 2001 From: chenjiangui <674149625@qq.com> Date: Tue, 30 Nov 2021 17:43:57 +0800 Subject: [PATCH] fix(Uploader): preview is slow when sum of images size be bigger (#9961) --- packages/vant/src/uploader/Uploader.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/vant/src/uploader/Uploader.tsx b/packages/vant/src/uploader/Uploader.tsx index d0f6caa02..1f5884c4e 100644 --- a/packages/vant/src/uploader/Uploader.tsx +++ b/packages/vant/src/uploader/Uploader.tsx @@ -4,6 +4,7 @@ import { PropType, defineComponent, ExtractPropTypes, + onBeforeUnmount, } from 'vue'; // Utils @@ -97,6 +98,7 @@ export default defineComponent({ setup(props, { emit, slots }) { const inputRef = ref(); + const urls: string[] = []; const getDetail = (index = props.modelValue.length) => ({ name: props.name, @@ -225,7 +227,13 @@ export default defineComponent({ if (props.previewFullImage) { const imageFiles = props.modelValue.filter(isImageFile); const images = imageFiles - .map((item) => item.content || item.url) + .map((item) => { + if (item.file && !item.url) { + item.url = URL.createObjectURL(item.file); + urls.push(item.url); + } + return item.url; + }) .filter(Boolean) as string[]; imagePreview = ImagePreview( @@ -338,6 +346,10 @@ export default defineComponent({ } }; + onBeforeUnmount(() => { + urls.forEach((url) => URL.revokeObjectURL(url)); + }); + useExpose({ chooseFile, closeImagePreview,