fix: avoid setting another mounted if instance is registered

This commit is contained in:
Michael Brevard 2024-06-15 17:04:19 +03:00 committed by GitHub
parent 5d5432cba7
commit 3727a435b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 11 deletions

View File

@ -105,18 +105,20 @@ export const createLazyEventClientPage = (componentLoader: Component) => {
const events: string[] = attrs.loader as string[] ?? ['mouseover'] const events: string[] = attrs.loader as string[] ?? ['mouseover']
const registeredEvents: (() => void)[] = [] const registeredEvents: (() => void)[] = []
onMounted(() => { if (!eventsMapper.has(instance)) {
events.forEach((event) => { onMounted(() => {
const handler = () => { events.forEach((event) => {
isTriggered.value = true const handler = () => {
registeredEvents.forEach(remove => remove()) isTriggered.value = true
eventsMapper.delete(instance) registeredEvents.forEach(remove => remove())
} eventsMapper.delete(instance)
instance.vnode.el?.addEventListener(event, handler) }
registeredEvents.push(() => instance.vnode.el?.removeEventListener(event, handler)) instance.vnode.el?.addEventListener(event, handler)
registeredEvents.push(() => instance.vnode.el?.removeEventListener(event, handler))
})
eventsMapper.set(instance, registeredEvents)
}) })
eventsMapper.set(instance, registeredEvents) }
})
onBeforeUnmount(() => { onBeforeUnmount(() => {
registeredEvents?.forEach(remove => remove()) registeredEvents?.forEach(remove => remove())
eventsMapper.delete(instance) eventsMapper.delete(instance)