diff --git a/packages/upload/src/useHandlers.ts b/packages/upload/src/useHandlers.ts index f19e36c45d..2d862552d7 100644 --- a/packages/upload/src/useHandlers.ts +++ b/packages/upload/src/useHandlers.ts @@ -1,6 +1,8 @@ import { ref, watch } from 'vue' import { NOOP } from '@vue/shared' +import isEqual from 'lodash/isEqual' +import cloneDeep from 'lodash/cloneDeep' // Inline types import type { ListType, UploadFile, ElFile, ElUploadProgressEvent, IUseHandlersProps } from './upload.type' @@ -19,6 +21,7 @@ function genUid(seed: number) { export default (props: IUseHandlersProps) => { + let cachedFiles: UploadFile[] = [] const uploadFiles = ref([]) const uploadRef = ref(null) @@ -128,11 +131,18 @@ export default (props: IUseHandlersProps) => { }) watch(() => props.fileList, (fileList: UploadFile[]) => { - uploadFiles.value = fileList.map(file => { - file.uid = file.uid || genUid(tempIndex++) - file.status = file.status || 'success' - return file - }) + if(!isEqual(cachedFiles, fileList)){ + cachedFiles = [] + uploadFiles.value = fileList.map(file => { + const cloneFile = cloneDeep(file) + cachedFiles.push(cloneFile) + return { + ...cloneFile, + uid: file.uid || genUid(tempIndex++), + status: file.status || 'success', + } + }) + } }, { immediate: true, deep: true,