vue3 如何监听生命周期钩子?
vue2 可中轻松监听生命钩子:
mounted() { const onResize = () => {
console.log('onResize')
}
window.addEventListener('resize', onResize)
// hook:liefHook
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('resize', onResize)
})
}
vue3 我也希望使用这种语法,vue3 不再支持 this.$once
,根据 vue3 中event bus
import { event } from '@utils'onMounted(() => {
console.log('vue3 mounted')
function onResize() {
console.log('onResize')
}
window.addEventListener('resize', onResize)
event.once('vnode-before-unmount', () => {
console.log('vnode-before-unmount')
removeEventListener('resize', onResize)
})
})
event 的定义:
import emitter from 'tiny-emitter/instance'export const event = {
emit: (...args) => emitter.emit(...args),
on: (...args) => emitter.on(...args),
off: (...args) => emitter.off(...args),
once: (...args) => emitter.once(...args),
}
组件销毁时,不会执行event.once
的回调。
在组件上监听生命周期:
<DemoV2 @vnode-mounted="mounted" @vnode-before-unmount="beforeUnmount" />
正常的。
请问为何event.once
不生效?
回答:
你可能没明白组合式api
/ hooks
的真正用法
这种情况也不需要once
// 封装function useResize(onResize) {
onMounted(() => {
window.addEventListener('resize', onResize)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', onResize)
})
}
// 使用
useResize(() => {
console.log('onResize')
})
回答:
vue3 已经移除了这个了,文档上详细有介绍
回答:
因为vue3可以直接这么写了
window.addEventListener("resize", onResize); onBeforeUnmount(() => {
window.removeEventListener("resize", onResize);
});
以上是 vue3 如何监听生命周期钩子? 的全部内容, 来源链接: utcz.com/p/936462.html