vue3中用什么替代$once

vue3中用什么替代$once

mounted () {

window.addEventListener('online', this.handleOnline)

this.$once('hook:beforeDestroy', function () {

window.removeEventListener('online', this.handleOnline)

})

},

vue2中可以用$once加hook:beforeDestroy
而在vue3中没有$noce,怎么用hook:beforeDestroy呢?
或者说,不在setup里调用声明周期,在mounted里怎么调用到其他生命周期呢?


回答:

其实你的这个需求是不需要用到 once 的特性的。

在组件的一次生命周期里 mountedbeforeUnmount(原 beforeDestroy)都只会触发一次(这也是钩子的 once 特性被移除的原因,确实需要的时候(updated 等)也可以自己外部实现,普通的事件仍可以用 .once 指令)。

你只需要常规地添加生命周期回调即可:

import { onMounted, onBeforeUnmount } from 'vue'

onMounted(() => {

window.addEventListener('online', handleOnline)

})

onBeforeUnmount(() => {

window.removeEventListener('online', handleOnline)

})

如果想在 mounted 里添加其他生命周期回调,只需要嵌套调用:

import { onMounted, onBeforeUnmount } from 'vue'

onMounted(() => {

window.addEventListener('online', handleOnline)

// 实际上是不必要的,因为 beforeUnmount 一定在 mounted 之后执行

onBeforeUnmount(() => {

window.removeEventListener('online', handleOnline)

})

})

mounted 回调里添加其他生命周期回调,通常只有发结合 router 特有的生命周期一起使用时才会发生:

import { onMounted } from 'vue'

import { onBeforeRouteUpdate } from 'vue-router'

onMounted(() => {

// 确保在组件 mounted 后才触发 beforeRouteUpdate 钩子

onBeforeRouteUpdate(() => {

// do something...

})

})

以上是 vue3中用什么替代$once 的全部内容, 来源链接: utcz.com/p/937308.html

回到顶部