From: daiwei Date: Fri, 3 Jan 2025 06:34:08 +0000 (+0800) Subject: chore: update X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10e180989c2f6de79470c1f61497cfc625d5c778;p=thirdparty%2Fvuejs%2Fcore.git chore: update --- diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index 5c3ab19db0..0e40c9534c 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/packages/runtime-core/src/rendererTemplateRef.ts @@ -13,11 +13,12 @@ import { isAsyncWrapper } from './apiAsyncComponent' import { warn } from './warning' import { isRef, toRaw } from '@vue/reactivity' import { ErrorCodes, callWithErrorHandling } from './errorHandling' -import type { SchedulerJob } from './scheduler' +import { type SchedulerJob, SchedulerJobFlags } from './scheduler' import { queuePostRenderEffect } from './renderer' import { type ComponentOptions, getComponentPublicInstance } from './component' import { knownTemplateRefs } from './helpers/useTemplateRef' +const pendingSetRefMap = new WeakMap() /** * Function for handling a template ref */ @@ -154,12 +155,18 @@ export function setRef( // null values means this is unmount and it should not overwrite another // ref with the same key const job: SchedulerJob = () => { - if (!(vnode as any).__isUnmounting) doSet() + doSet() + pendingSetRefMap.delete(vnode) } job.id = -1 + pendingSetRefMap.set(vnode, job) queuePostRenderEffect(job, parentSuspense) } else { - ;(vnode as any).__isUnmounting = true + const pendingSetRef = pendingSetRefMap.get(vnode) + if (pendingSetRef) { + pendingSetRef.flags! |= SchedulerJobFlags.DISPOSED + pendingSetRefMap.delete(vnode) + } doSet() } } else if (__DEV__) {